- 在线时间
- 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
- 自我介绍
- 往往
 |
5 v" W/ K1 a& a% b9 ]& v( v4 w. B( C3 y
* @- Z2 m7 l+ q+ I- K4 y/*
4 R) n/ y W$ H h( Z使用递归方法求全排列
: i; I5 g6 H' e" I*/6 e5 g- V8 ~; M
( J% V4 ?1 t/ P1 k; V1 K#include<stdio.h>9 Z" S9 F/ c5 q/ `2 Q- k5 l: S7 e$ a
: {) f$ f* E3 w. |3 p" t# L- ?int sum=0;
; Y; @4 G) j* i' I- k. ?9 Vint main(){
4 C: u8 d: ?/ X3 b5 b/ O% ? int n,i;
' o5 e7 M \1 S5 ?, \$ A char *p;% f4 i6 R& F& a. J) ^1 L% x( Z
void perm(char *,int,int);
" C8 {4 ^3 P0 X9 k' Z( h0 _0 T5 b! v/ e
scanf("%d",&n);9 x( ~3 g* [! E3 y& f; b0 S1 a
p=new char[n];1 d) f' M; M& l; K& I1 j+ i% K
for(i=0;i<n;i++){
8 A" @, g' q: s+ o' V# t: f, x- X getchar();
4 e+ w( E, j) ~; X scanf("%c",p+i);+ B, h3 c& m9 l# L2 E4 J6 P! g; l
}" @- e3 c6 B- j7 V# Y( A1 V, ]
$ x' r9 `! i/ F) _) m5 f% g7 z
perm(p,0,n-1);3 Y! |* x I" j
printf("==>%d",sum);% b# V9 Z) f1 E; |0 r# y" Q1 `. X
+ A, S7 h! r) }
return 0;' P" K V6 f# _
}) j' m% Z6 ]* c: h- [- T
: o: O; H7 d. M1 Fvoid perm(char *p,int s,int e){
& p2 [ v- r- u int i;
0 k Z" N" O: ?: | void swap(char*,char*);1 |6 ]' l! {% D3 z1 N) ^5 X
/ r5 N S- y$ H0 A# ? if(s==e){
$ l6 L. r1 p/ V# M R. I6 ? printf("%s\n",p);9 C/ v/ g2 N+ S* ~
sum++;) [% A8 V0 T' [; g1 k- u5 m
return ; k8 b' W1 `% \6 u% W) _0 \
}6 h. a9 E1 c$ T- ~/ o8 S# i: ^
else{
( B% j0 {+ T; l, O1 T for(i=s;i<=e;i++){
4 n2 R" D( h; _" T swap(p+s,p+i);
, ?2 _! f7 k) V+ ~7 J) @ perm(p,s+1,e);
; X1 | z! R) X6 R _% V/ ] swap(p+s,p+i);. p! m' O: Z/ K$ L
}/ r0 D+ {" D& |+ x
}
9 q$ r" \0 d- B, A2 n& p" n1 j6 m}
0 z% A% V8 ^( Q5 [4 S6 r# x$ z! k0 {+ D# e9 W' {
void swap(char *a,char *b){4 k7 ^ F* E+ {* V- y5 B* S
int tmp=*a;$ j( O* A% R. N6 o* M- u
*a=*b;$ V$ I' p( ?8 |$ T2 p9 Z( ^
*b=tmp;1 N2 V) P6 M9 R! |+ h+ }2 x9 n
}
* ]9 S, G8 b7 E4 X8 t/ m E |
4 [' d; j S6 ~======================================================================
- \& ^6 F& f5 [8 P 1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。, f& `; w0 q9 V$ E3 F) G: h, S* p
2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!
3 Q) }% Q1 X: {% ]2 m* \6 |" k: W& E; r
( G* n" z5 T: ]( o F
" u9 ~8 M0 q8 f
|
zan
|