" a/ R- q0 M( C4 D5 T3 z0 a' W2 I9 s* `' Z2 U+ Y
/* + ^7 b) @% v" {5 ]' P0 Q1 N9 r使用递归方法求全排列8 k _7 D1 s- E, t! z( A8 W2 O& U
*/ * ~' }7 w+ E Y9 y & q D. ~/ j' Q; s2 _- u4 r' E#include<stdio.h># c. j/ `( D( T: x) n: U
" v* l/ o% H. C* E
int sum=0; ; W$ W" }3 L& W. Cint main(){3 n# x* O% o" ]* O/ P t
int n,i;4 u2 J, |9 o8 A( d: ~' P Z1 Q
char *p; ' ? Y+ \# Y( T" x3 Y0 v' W9 I void perm(char *,int,int);' M! X/ W+ ~* _. _5 ?9 I @4 K9 n/ R2 {
6 ~3 ?1 J' w. x scanf("%d",&n); , p0 U: w8 `: X2 K$ F4 x- M p=new char[n]; 7 z3 }( S6 |0 B for(i=0;i<n;i++){$ J7 w' @1 V5 b. C* C* T
getchar(); a) t7 J# {; d7 |1 f2 }" W# R
scanf("%c",p+i);7 ^( N" T: K! x% Z
}7 V( N+ n. Z( [, x0 w/ t p0 ^5 { M
9 u! [( E: Y8 f2 |, h4 l7 J2 p perm(p,0,n-1);( P4 I$ |. T) Q& Z
printf("==>%d",sum); : n+ m: Q, m1 C& F# x, q0 d 9 F2 O2 B& F) b# \0 L return 0;% q0 B* Q$ B+ T! N# |/ I! Q
} - x' `* S- Z9 D2 G4 T% z) y" b N% R$ _. i! A K
void perm(char *p,int s,int e){ ; L% i. e }: ?2 S! h0 O/ F: L int i; & j; d! B& p$ D% J3 a: C+ { x; U' | void swap(char*,char*);# u3 h* K" Y4 [' [- V: {8 E
" j: h% @; K; w7 @1 d, L
if(s==e){, s1 r5 a W/ O ]
printf("%s\n",p);/ j- N9 g a9 A- B$ l7 O
sum++;5 }8 s! E5 t" s- B: n
return ; + X5 K% Z+ Z0 k } % v- a2 W/ M' t' }% _ else{ ' ]' \) }. F% L2 ]* a: o) v. r for(i=s;i<=e;i++){ 5 D8 ~: U! F8 F4 _7 i( @ swap(p+s,p+i);: s$ G: t& T2 y
perm(p,s+1,e); 2 |; N1 p5 u5 |1 w0 h swap(p+s,p+i); 3 \7 c2 m0 \( u7 o- ^: u } 2 P( u0 `$ O* s# ]9 ^ } / s, J# m. q; p! f/ \* M, n} ' G* h d& ?: R5 T# f) N; I5 s: l. q) I# f+ }
void swap(char *a,char *b){ 7 F8 Y" n3 [* v Q9 m% Y/ p int tmp=*a;" Y: p" s' G h8 s' J" w
*a=*b; ! K" n3 B" Z) A *b=tmp; { E4 s' ]- \ b- `
}9 r- i3 i1 ?$ x9 K' e4 i# b
2 J5 Y. w9 P+ x& @6 V2 Z" D======================================================================1 V. x; a P- ^3 W; h0 P
1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。) c9 x' C# O7 W6 i ]
2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习! $ k4 ~1 ~; w' C0 K 5 e1 S m, ?$ X( Y1 U- g ) S3 x3 v4 u5 C4 R# ? & C+ O. O9 I. u# {1 o, f2 u