- 在线时间
- 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
- 自我介绍
- 往往
 |
& f8 X$ N* M6 K) x/ q3 s
8 s2 J: ]) Z! V/ ?+ k
. B. Z' {4 M2 y W/*: r0 r$ p8 Y( j8 q
使用递归方法求全排列! @6 L3 o) s" T" @* A9 i
*/
. s0 G' |0 u0 K% J" O' ~
7 E0 ^$ X9 i/ y6 Z1 P/ K1 ~#include<stdio.h>; D4 y6 j T$ ~
% K1 R. J1 k# B! g8 x7 U- m
int sum=0;2 M J/ \; w" Z
int main(){
( g+ h+ W% y) T; A! `2 h; S int n,i;. v9 s8 L3 C4 g& Z0 H6 ~( A+ R- B
char *p;
; A {* J+ p7 G @ void perm(char *,int,int);
9 ]* k5 n0 C. Q8 _
9 u: |; ?9 C7 R0 O7 T1 d1 G; } scanf("%d",&n);& u1 m9 y: X6 N: O+ B3 a
p=new char[n];
8 u7 V5 \0 g* p* z1 j; Z for(i=0;i<n;i++){
7 _8 ~4 j+ ]0 p3 p( g1 K* f7 Z1 X2 v getchar();5 u/ |7 I( h" D
scanf("%c",p+i);
/ w8 N( H( e1 E7 l% k: { }
5 m- }( k2 h' o3 F: T
. Q. g, j! [) N perm(p,0,n-1); B, M1 u) m4 ^# i! m! Y
printf("==>%d",sum);: v% ^8 T( f/ b6 o' d4 T+ O
0 J' W( z% |. f' Z0 J
return 0;& D8 c7 q3 ~( T6 b. u1 G4 z ~! G5 ]; Z
}
( V5 m- M/ E8 X1 j. c6 c, p* b& C# i9 F# g1 Y" S" }* x
void perm(char *p,int s,int e){
! k4 Y$ \" M+ ^$ k int i;
! F; u [9 w! ] void swap(char*,char*);1 o4 i) V* I+ C" }, N5 N2 |! t) X& b
- `* F: k. N- b2 J
if(s==e){* x7 _1 L$ h# v& {* c. |, ?
printf("%s\n",p);6 _0 A) n$ i/ X! o0 Q
sum++;* m1 b, V, P8 `* s+ Y! n" [
return ;
6 J0 F7 u4 _+ w }* G* n% D: y3 n" r s8 R" l
else{
; W5 B/ Q3 g1 A& |' J for(i=s;i<=e;i++){3 Z0 [! T* h$ K4 K- s U
swap(p+s,p+i);
' q) r" O) I( H6 |! K perm(p,s+1,e);; t/ o C- k; d" Y+ m
swap(p+s,p+i);! L7 B/ ~* _# U
}
4 n7 m6 A2 v* v; I/ B) ]( n$ _ b7 X! T }
1 c% L! R8 B( J, ^4 S}# v7 U E0 @, l0 f1 a& D8 d2 g
6 X* g, z7 \9 m8 R3 O6 G% @; M
void swap(char *a,char *b){' ]2 Q; v( l* T5 \7 [
int tmp=*a;& n! w, F; F5 S7 @* A1 `
*a=*b;
/ V1 B" x# U# J$ f. Z+ x+ G *b=tmp;
( I% x+ q) z! f- l$ J1 ?) e- ]/ U}
- s7 c+ @( i- `, Y4 O5 w! ~3 Z$ A. B! S
======================================================================
' r- E0 @# T$ D/ X* T4 H* I 1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。
9 t# a6 s* i. Y+ t/ Q 2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习! T! ^$ N7 Y9 I0 x9 \1 c8 T
- c O# E) g5 b4 G( y
5 W% j! J) e2 O, ?; q) z
: T. D+ r- Q2 G4 `- B/ F |
zan
|