- 在线时间
- 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
- 自我介绍
- 往往
 |
7 r X' ^0 J; G; ?
. l9 ^) @8 J- \* o+ b2 U4 {4 ]; r
1 Y2 U6 \# a# n/*7 k. B/ V3 Z: {& F6 D5 m
使用递归方法求全排列8 R2 k9 t. ^, R/ H# R+ d$ |$ y8 w
*/
6 Y* j! \& n' n2 d: }( {, R7 }# _1 ^) x- A5 E5 j2 _# ?
#include<stdio.h>. R5 C: m( v9 X, k9 B
; s6 H3 l( a) p0 W3 j+ X
int sum=0;
: B2 O7 x: ]( z8 Y: k# p/ B0 P7 Eint main(){0 _0 p# G' Z" w$ K& h7 D
int n,i;
4 D5 s. P9 ^3 G4 S4 B2 O char *p;7 t% w# e6 X: `6 a! O4 a
void perm(char *,int,int); c9 h+ `0 F; k l c: p
+ |7 U$ m/ O2 @# o scanf("%d",&n);
( J9 o6 F: [3 T3 N3 p$ R p=new char[n];
( ]% }/ k6 [/ j for(i=0;i<n;i++){
% V' F0 u, G/ a1 e5 W) k# y$ N getchar();
' g, z4 F# i4 ~ J) y* p scanf("%c",p+i);8 e+ `, u1 S. V& [+ @$ v& J2 O
}6 E8 i, l! ^7 [# ~& m0 d
( ^- X; t1 w9 |- h( z; T perm(p,0,n-1);
/ T8 g) L/ `+ w# c) ] printf("==>%d",sum);8 t4 G$ j* a5 M' j
, P: J: A/ S5 c( E7 r
return 0;
& e, l% F4 y) B2 R; G) F: H2 i}
3 Z- E2 f' O. [/ H& D+ A7 O9 ]- |9 ]$ r! f
void perm(char *p,int s,int e){/ [+ v5 A$ y& n3 B' f$ }
int i;
0 e% {% C3 b L' L8 i+ | void swap(char*,char*);
c! C8 r3 [. K" _5 Y6 |# t) z
% o5 f4 q* Q# B3 C. |' u5 r( S if(s==e){4 `; d3 i I* d& Q
printf("%s\n",p);$ x7 p( W9 |8 f* |
sum++;( O" b; Q$ Y1 r5 N% P! \1 H, h
return ;
" ]4 z7 ^! S7 I. u9 V: G; O: G }! b/ p+ g% o; S- D0 D0 E
else{* v. Y6 F* x, S9 ]0 A" Y% t
for(i=s;i<=e;i++){8 K6 p. m/ @7 B
swap(p+s,p+i);
+ C0 | l8 v ^6 d( K4 y, h2 \ perm(p,s+1,e);/ v" V( a1 R# e% I: @( i
swap(p+s,p+i);
! |" z. u7 x' Z5 F5 [ }2 M9 |7 k1 j$ o n
}9 L2 m; n8 a! N! j. B
}" ~) O" y! h: [ j2 v
# e- B8 D. h I# U
void swap(char *a,char *b){
7 [1 N/ J' L5 e4 E( ^ int tmp=*a;
' T6 z! J1 C/ t! K6 e2 M! G# `' _! E$ _ *a=*b;
3 ]5 R( i# _8 a: y* y *b=tmp;
( X% a& c+ N8 ^}& u0 A0 c k* A4 v/ y0 }& E9 J/ w
* ?2 H. N. x5 Z. j
======================================================================
4 I0 H, s7 T9 f5 `9 k* u1 r! l 1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。
2 e# g! U4 S" q: x7 Z7 u 2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!
) X4 H2 U# i( O; b, Q& f. F+ l X! i# p2 p% X
/ C0 t' c7 U5 a4 e# S/ g3 Z* ~. v' W
* G! i! T* x* U0 ` |
zan
|