- 在线时间
- 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
- 自我介绍
- 往往
 |
8 M9 |. ^' f2 b+ D
6 r d6 M' V' [# P/ `" M
8 I* c& B7 x0 F6 J2 y" A/*
z, o, C/ `9 i$ h# O* A3 V( Z使用递归方法求全排列
" |6 @$ P* ^: O2 z% z- W+ B, }*// Z5 s' d2 T2 V; U. c
( @; j, e" R v4 W3 n, D+ L1 d
#include<stdio.h>
. N9 c$ C( Q" P& ?" o" j% c5 B( s: b0 p" `: R
int sum=0;
, C4 Q; X4 W4 sint main(){3 p6 A$ ~) l" S9 Y# ?
int n,i;
- D! ~' y4 b% i3 L char *p;# f' e) N6 H* R! O o
void perm(char *,int,int);
1 U* q4 V6 D7 S6 {# t- c) |" x1 j0 Y6 d1 g G8 Z
scanf("%d",&n);
) \" B7 ?6 W8 v3 T" e m+ ^4 i4 | p=new char[n];
7 p7 [( B j9 {0 r8 w for(i=0;i<n;i++){5 S1 n( G0 j4 x: @
getchar();: f! y3 e/ m. O6 P# c7 V
scanf("%c",p+i);
; t+ @2 e! m( X# ^; H( F9 o: D }
: B% N; d0 x4 S. C9 I9 X
; Z6 C& I8 ?7 h perm(p,0,n-1);
K; H5 ~# u" {$ d' G6 ?4 m) K: l printf("==>%d",sum);' V" c1 f9 U% K$ p6 j( N/ p/ v
8 |( T4 e9 R( I( ^2 p' d0 h
return 0;& b2 D2 B! E$ f" ]2 \
} v% a# ~7 n% J: G/ O
5 S* m) d, w2 s8 e5 `& S+ a4 |void perm(char *p,int s,int e){
; D: _1 Z$ Q2 t! ]' [ int i;
' }# a5 |( V7 E* h5 I0 O$ g, P void swap(char*,char*);
4 x+ L6 i' ?: a( Z( f) p* E8 b
2 S4 [8 l# p! n: d! s H if(s==e){1 r( K# V& s2 L5 G
printf("%s\n",p);
/ o/ _" X% w0 o; S sum++;+ S+ g: Q! |0 B& H3 m/ }2 k
return ;
0 l8 j5 z8 a. n1 ~ }
. h( _0 K" X" l" x* c else{
4 `% p+ p7 k6 i) h! N for(i=s;i<=e;i++){
0 }! u* c. }9 j9 G" `0 b, M: y( h swap(p+s,p+i);
0 [0 |2 O) \3 N, w7 U0 L8 Z) i perm(p,s+1,e);
! N7 [4 l) J. K0 t1 s, e* d swap(p+s,p+i);3 P- i9 u2 ?6 s% B9 W
}# b9 H1 v0 J3 x; S1 N5 g8 E
}
^4 k1 W6 f" {% H}8 U( X$ }. }4 _
& J, D6 F+ C( o$ `# d, evoid swap(char *a,char *b){
$ A/ t+ n( v% S9 l int tmp=*a;
: w# x x9 q+ j0 Q *a=*b;
0 g) P/ b" q1 F* w: ? *b=tmp;- J5 W, ?7 H4 M0 J& e. j) E2 {) `
}) G4 D6 C3 U2 Z
4 U! \' R7 `) |3 A+ n& R
======================================================================0 N# y8 V' T9 h0 p3 y
1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。: O% G/ o' ^) }0 u$ B
2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!
Y( m& r. C+ z @1 X+ l8 c4 J. }1 I! @2 T4 |
+ A' D8 a: \6 ]. Y+ N! ?6 s$ v' |9 t9 o/ _" t U5 S+ n4 U1 e2 L/ n
|
zan
|