- 在线时间
- 6 小时
- 最后登录
- 2015-5-5
- 注册时间
- 2015-4-8
- 听众数
- 9
- 收听数
- 3
- 能力
- 0 分
- 体力
- 111 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 49
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 27
- 主题
- 14
- 精华
- 0
- 分享
- 0
- 好友
- 7
升级   46.32% TA的每日心情 | 擦汗 2015-5-5 09:17 |
|---|
签到天数: 13 天 [LV.3]偶尔看看II
- 自我介绍
- 往往
 |
% k+ }8 u! R! Q8 j
y5 q+ s1 }0 P& B
& i1 z' s; t0 j2 i' j/*
/ R1 m9 s3 }6 B: l; M4 J使用递归方法求全排列
3 c6 a& e6 f9 s*/
6 L. S/ F. i: r$ k! j3 E1 x/ w4 R# F0 C. n0 P# W7 r/ S* R
#include<stdio.h>0 e$ z. ~' P2 f% q0 R& Y7 e) |8 u
2 v3 m+ \; u% o1 ]' tint sum=0;( ^& t6 X3 Q- T9 V; \
int main(){
" |, q5 t* G8 F; N) V' k int n,i;$ {4 m: k) q9 i6 x$ L" @
char *p;
0 o. E5 c( H; d ~ void perm(char *,int,int);
, X( V+ J, C. ^7 \9 E" ]( M* H
: s' i+ h7 m( Q5 K scanf("%d",&n);
3 Q. V# Q+ E- ~. D* w p=new char[n];
8 Y6 g' ^3 r+ d, l9 B for(i=0;i<n;i++){' ^1 w5 {2 G9 `
getchar();( B* n; d* F- c# _ A1 H! b' L- C5 V
scanf("%c",p+i);
1 a) Z& F I- k }
3 j7 z5 g# P7 b' i3 G$ ~3 M+ }8 F- u# S/ D4 |
perm(p,0,n-1);: j# q. f2 p' n/ E( \8 I* I, `4 O
printf("==>%d",sum);. n4 W5 R# c p1 l3 I5 R8 |
, V7 K I1 O3 u# W$ \
return 0;
- [$ {9 P( K- P# D( P, ~9 c6 j4 i}
w( i$ L8 y; M$ E9 Z; i: Z, _- \, a
void perm(char *p,int s,int e){8 r0 W, y7 |' }
int i;
9 {7 q$ P; P4 P/ ?) p void swap(char*,char*);! W/ [1 {+ b c- u* t
2 O! l s6 Z$ F6 t; K if(s==e){
. c" U( Q3 [4 E" i1 O printf("%s\n",p);3 b7 |6 W) s4 T
sum++;# j+ t: v5 I: B; n4 \! g
return ;! s& }7 O$ C2 K' O( q9 ]3 o: d8 J
}. r- w7 X% @/ T8 V
else{
/ T9 B5 _3 j2 E; H5 t4 q# T. D for(i=s;i<=e;i++){
7 Y; h0 r9 d, y( S5 H: _ swap(p+s,p+i);$ R1 K$ Y* [& x! ^6 d
perm(p,s+1,e);
% T5 J, |' Q y9 }+ e: M+ [ swap(p+s,p+i);
6 _ h2 f# E% M3 u }6 d* ~3 O1 N2 w0 A- v. ?: @$ Z2 g
}
% `0 E+ u3 X* j! ]; l) q}
V7 S* x7 c. h$ ~% @6 D& |% |1 p( C+ X# D% m8 ~' w3 F
void swap(char *a,char *b){
7 z5 @; F# X$ K8 w: N+ d int tmp=*a;- u- R; L h3 k# S
*a=*b;1 k: d- v5 A$ g3 c% e
*b=tmp;
3 s& B1 @1 h% [) `}
) e9 N3 C" w% ~2 [& \+ E' ^3 U$ z- n m1 B) d9 N
======================================================================
- R9 K2 j& {4 v 1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。
9 {; W* D, a- h2 Y6 k) j3 l 2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!4 `* d( I6 a6 {3 n- w& }4 ]' W
; R$ o: I# F1 _: k- I9 f- Q
3 w1 R0 H: @4 H, v6 U0 _2 C
( g8 y/ ^% m8 ~8 v6 A9 I |
zan
|