- 在线时间
- 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
- 自我介绍
- 往往
 |
1 |/ |, e0 K0 z' m+ z/ e4 x3 T6 o* O3 a4 K$ A
' m0 y) v6 y/ w& j3 I/*2 y# U- N' |) e; V
使用递归方法求全排列
* q6 s: n# O w* b5 M' ~' ^9 A" L*/
' W! p7 m# v! c5 e; V$ j, W1 c. ?) Q1 u6 N! b% r! p
#include<stdio.h>) l1 Z5 O+ {* j( T
% v3 X- ^% s7 h6 g$ t. ]; Xint sum=0;, r, M7 Q6 C' \" g/ N$ v
int main(){5 z$ z% N5 j5 y O! }- q2 M
int n,i;$ f7 ?2 ?* S1 y8 V5 ?1 v. ~
char *p;* t. J5 i" n0 O' V3 n9 l
void perm(char *,int,int);
" W- I7 K& D/ I& L6 E& N
5 M8 Y1 U8 I* j$ z7 B0 Q- z scanf("%d",&n);
' }1 h- P3 B0 ?, @: G p=new char[n];
* h! _' X! K" v. l1 r for(i=0;i<n;i++){
7 O/ p2 I2 l" I/ T4 s0 X8 A/ D getchar();: R' S T B( O0 O2 B1 J/ g" N
scanf("%c",p+i);
, I; `7 ^4 U" M$ n }; n& a5 S9 H. t" L+ Q8 t* J
, ]3 R* U4 N5 [( M8 U4 p$ A/ Z$ B$ m3 ] perm(p,0,n-1);
8 W3 {7 p _( k9 k) N+ C+ o& F printf("==>%d",sum);( H% Z/ O7 T; p
& B8 Y4 _7 B0 ]. y' G
return 0;7 G9 M. \ X& K' u2 \
}9 ~/ f" v& X* e0 B+ _* H/ A: ~
6 B) z# ?6 J4 R- w$ A. Q* G2 j
void perm(char *p,int s,int e){
+ C8 W) R: e+ Y E$ ` int i;2 J- }* l' a- N& c. U/ [" T; {
void swap(char*,char*);
2 Q& `5 T0 q) p
' k1 I/ S! |" f6 q/ g if(s==e){
% n+ M( k) V8 ~4 |" u% R printf("%s\n",p);
0 M8 g( a% y0 `( t sum++;
8 I1 f% h! K9 P% x: j+ l7 b return ;5 ~ P' h. Z2 V) n6 @ ?! d
}/ u) F, d' z& C A, }6 i
else{+ R+ K4 k! p0 ?0 B$ V& q
for(i=s;i<=e;i++){
; \1 h9 h d/ G1 N; w swap(p+s,p+i);
5 `- @0 o- U; C6 M, l1 p perm(p,s+1,e);& I% ^: f! W& }; [
swap(p+s,p+i);
2 d1 S0 w% k; ^; z$ s4 t }' @, t0 Y# N3 p6 P, T! H
}
F4 g8 W5 B; z- X+ ?: M3 F& V0 _# r}
4 m' ~2 c4 J1 \
' y9 w4 K) Z! N! ]( N& x4 Jvoid swap(char *a,char *b){! V+ F# e% S4 U0 V) j( @! t7 V
int tmp=*a;
; j1 d7 k( A' S% B) x *a=*b;
! d( h+ l) r9 h! W( ` *b=tmp;
$ s1 ~ L7 ]3 y1 k* [# _$ r' D} Z$ l8 B( N, k0 ^! e! y8 u
2 c. ^$ j2 j* X7 m8 d- a- a1 D======================================================================% W0 c9 ]4 h/ T2 N5 y: v1 d
1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。+ n* y$ b1 ?; {+ K# T+ A1 x
2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!$ g l8 l+ L- F: b3 `
) m; Q1 y( a" D4 c( y, j
# q- L0 v3 R+ \$ y2 y; F1 h
5 z' v' _9 J8 d7 T( w |
zan
|