* I! b. Q! t1 Y7 H4 g8 I8 Y$ A6 P% c: y ]- A- N0 v
/*4 J V+ c- e+ x
使用递归方法求全排列 C4 m; {3 w9 i5 m. p*/* R: G& Z7 r/ u1 h: L" T
' I5 {, N0 I3 g
#include<stdio.h># v) ~) c* n& C
1 O9 m/ }" Z k+ A& r" hint sum=0;6 m7 m* R& V! J+ S% _: U
int main(){ 6 f Z! P+ z! L7 x1 b1 M int n,i; ; s; x& {# Q9 t. c; q6 O char *p; " ?! t+ ^. K/ y* T5 Z void perm(char *,int,int);' s8 e4 K. Z; ^9 g* X
; U8 b" m4 F1 k; I& H. ]. \
scanf("%d",&n); / T0 d0 {7 z) ?5 {: i: F: Z p=new char[n];/ c* g# Q% Z8 g* @3 M$ T F5 I% u
for(i=0;i<n;i++){( y. o g! G; v
getchar();( ~. p6 H5 h2 y4 h y
scanf("%c",p+i);* F1 d! e6 v) y+ N
}; L0 {* y3 z" f7 E
. t$ m$ W! _' y; D+ B* U perm(p,0,n-1);* T' ?2 [# m/ w6 M: |. o
printf("==>%d",sum);; X9 G5 }- B; `9 p( I- w
* ^1 ?( [* p$ d( N return 0;- H4 I. f4 O2 m9 y/ }" ^# K0 n
}6 K, X8 v7 G7 X0 N9 H9 f! n& E
/ _2 ?4 G- B; [9 r7 G: h. ?void perm(char *p,int s,int e){: ~6 l5 M# n" g+ D
int i;: o; ]2 Y) B' i( v. b( H
void swap(char*,char*);7 x r3 h" a0 I4 g% P2 N4 D
0 ^; d! o% z! C5 b0 i+ F4 y5 d if(s==e){# d+ Q5 A# B$ P" X
printf("%s\n",p);$ B' M. z) X: Y: d/ w
sum++;; G2 V: K, c8 O; e
return ; " x+ n! G( E. Z' ^ R V! z( }* ^( A }# R( ]8 v, Z) t5 G4 k* F
else{ , M; w+ a0 A' x+ d: q& } for(i=s;i<=e;i++){ 9 g' Q% x: \6 Q" r% k+ d9 | swap(p+s,p+i); 1 y* h, V7 s" b) c! D0 m perm(p,s+1,e); ; `8 t6 M8 U" u8 G7 ?# j swap(p+s,p+i); : {6 e& S4 n. O' W' r' N }( C/ c2 p2 C8 C4 u4 z
}' z8 z2 s5 l8 b: |
} 1 A) f6 E3 ?$ C! f1 ]7 y. V6 n$ X5 h! w+ H$ z
void swap(char *a,char *b){* W3 r ^4 \0 R8 V) m! \6 G
int tmp=*a; ! s/ b4 j2 c$ _) b *a=*b; 1 D& S* j8 p3 h& O+ N- v; N* N% V *b=tmp; 2 N% a# {2 X; T* J6 q% d}1 d) D& i- p; f" {