- 在线时间
- 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
- 自我介绍
- 往往
 |
9 @. q% g5 @/ v6 k6 v& ?$ W4 L$ _- _( s. D
7 R, @* M/ A! j0 H/ y/** Z5 Q) o3 y! y7 M/ \* M9 P
使用递归方法求全排列
9 l2 ]: g' h8 U+ r3 l$ n$ ^*/5 Q3 v! r" M( V/ |6 }' E7 U
: `' h* ]8 J' R0 R0 h3 P#include<stdio.h>
0 K6 O0 I! S& X: V2 Y$ S7 D$ s8 Z% u
int sum=0;% K& E* J0 b9 p( |6 Z4 \ i
int main(){5 R+ L* l: \. ~. U4 ~9 C
int n,i;& t( r+ W' W0 c' O! _5 A
char *p; i& |' g* V' y7 L
void perm(char *,int,int);" Z2 r& f% b# T
7 L) Z- o1 w% x. S K9 ^+ j* _ scanf("%d",&n);
1 ?, G- I7 b% Q8 \% u3 Z, u! I p=new char[n];8 ^+ ?% ^- e+ [9 m
for(i=0;i<n;i++){
8 i* Z; o; O8 m' O. ] getchar();
( |& T7 T) R- w8 X/ K% ?) ]+ K scanf("%c",p+i);
0 `2 P5 W d6 E% p9 w2 @ }0 r% J% P1 z& A; H, b/ ^+ U
, i% n% I" ^. |: P6 P perm(p,0,n-1);2 Z( b4 Y7 A- q& @9 X
printf("==>%d",sum);
2 T5 w5 {7 }$ H' o$ F3 u- @8 z! L+ r0 g2 q( S* m6 T, [
return 0;7 V1 b+ t4 o8 J1 w) a, f$ `, A
}
2 w |5 t, T, X8 ^+ R6 q
7 o. G3 |0 S/ r* kvoid perm(char *p,int s,int e){7 X0 E2 D( k8 l" f! p: X( ^, N* f
int i;0 R O( |+ U$ }- o
void swap(char*,char*);) D5 C# x1 }* L
4 _. S- j" k" u0 h if(s==e){
! m, _" t0 N7 Y$ r, p. C, J printf("%s\n",p);
2 G& I$ |* Y' L; o sum++;% S J4 }% n0 H4 N
return ;8 h) a: X9 s. R. s
}
4 t" K# z( u2 Z1 ?7 ^2 b0 |- j else{
- ^( v; C. }3 p% @0 x4 G9 | for(i=s;i<=e;i++){
' G& q+ Q. F6 t( f$ q swap(p+s,p+i);
0 I% A5 T# V) y; q( B perm(p,s+1,e);' }0 G/ A1 A( c; O! e$ h
swap(p+s,p+i);
4 d$ t. l0 @% _ }& S7 t' H) w7 g: p$ x* q; G
}
* \0 |5 x \: C}
" h' E7 E$ l" \: U% f; S3 q U+ Y' p" q0 i8 x# ?5 X0 m3 ]
void swap(char *a,char *b){. o9 J) v8 R3 y* J ]# l
int tmp=*a;3 ~) d% }( w5 Q0 C
*a=*b;
$ X0 C2 o# D4 L4 k" u *b=tmp;) m$ k7 k" H. K
}& m: B5 T$ W- w' m1 }6 z
M2 }* S) r! t$ m======================================================================) z- e/ ` S- I
1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。
& \1 F# R0 m+ O( \9 G6 {( Q ^ 2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!# |$ c* A0 N& V; c
4 Q( d% b$ ?: j$ G, a# _
& m8 r2 ~, Z4 P
. S: W$ x: S0 `& x- o
|
zan
|