- 在线时间
- 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 C# l5 Z8 z! A7 H5 d, C
2 l1 S( P1 W. M+ ]$ T7 J
# q s0 P/ i6 N7 x6 d/*+ n9 l. Y! l1 ~7 b% I* t
使用递归方法求全排列
" x& Z( O) _ ^; l" Y: J; \! h. @*/
% ?$ Y: R# j; j, V9 B/ G% K. v9 e) e
#include<stdio.h>
- z3 T% m& I/ @% Z M7 ~+ S) `8 p8 f
8 _4 c9 u% ~9 p! Y H# j6 s3 J6 `8 eint sum=0;
. {1 i( g6 @2 e: a2 Uint main(){5 v) R A8 ^% A* g0 c9 @
int n,i;1 k) d l2 S: `( w. Q9 K, U4 X5 n
char *p;- a% ]3 s- R3 q# e' U8 ]. K
void perm(char *,int,int);8 L) r# ~2 X: K2 \
" A2 N4 L$ f3 t8 f scanf("%d",&n);
1 F9 @8 K( Y! l/ `0 k" j p=new char[n];# X! @; @1 A! e- u9 b5 V
for(i=0;i<n;i++){, I0 \' [2 v0 M0 k5 x# b; m( d
getchar();
2 `5 d! V' q) [4 I9 ]9 J+ U& y9 s' H scanf("%c",p+i);$ r: `5 n' M9 Y; m
}
( V6 P& N, G' W7 z& j( ?" n5 N9 d7 t, q1 }
perm(p,0,n-1);; b6 c5 s9 m1 A* @) H
printf("==>%d",sum);
( k) L( D7 S, Y, n
0 r/ \& a1 q, F return 0;
' E( ]. y" t/ Y3 c' K: O}+ Q6 t7 D& v `4 X
" |6 [# W r! U% q* K0 _" Q( o" s' p
void perm(char *p,int s,int e){
& V( L* w6 R% n7 _ F; K- o int i;3 F" V: ^ q; m+ U' v3 |' N5 d# x
void swap(char*,char*);
& u4 m0 I' h+ a: H# R" W& f( O 2 | o! k$ g @* N t# s& D
if(s==e){9 b6 |# k. }0 _/ j) Y+ o
printf("%s\n",p);
" x7 M+ S6 p9 t/ r$ ?- W9 U3 U sum++;
4 H8 J* @; @# A; m5 n% W9 z/ R return ;, c0 u1 A. y/ V% M2 W# {
}5 l4 f9 ~* h: g$ ^5 q
else{
% |) Z- }: N5 w6 v8 I# K2 E for(i=s;i<=e;i++){. _6 D, O$ G$ `9 |# L
swap(p+s,p+i);
# o/ k3 L. u4 h9 |2 S# b! Y perm(p,s+1,e);1 R, x& e% Y9 B/ R" v. Y$ [
swap(p+s,p+i);
: q0 f, v6 w' G% I \ _6 y }6 m& X5 y' O; h! j- Y3 B( I
}1 o1 m6 v5 ^5 G
}" ^3 O& {9 B7 k* \+ c0 a
`( m9 y' ^+ B1 z
void swap(char *a,char *b){8 r6 P# B; h/ M+ h s3 M& ^
int tmp=*a;4 d4 H: H6 ?$ t& w" ?/ G; Y4 q8 T, A
*a=*b;; m) e3 t: {+ o3 B8 c
*b=tmp;: ~& O2 p |. Y2 y* R
}
) n) H$ G/ k2 W8 c+ ]; f- E. K& i' Q6 G& |
======================================================================/ D, E* X: F. [3 Y0 S4 z5 K
1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。
6 Z s# ], K2 Y' _% t 2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!' v: N" M* Q* A1 a/ y
. W4 `+ {& E/ O* Y7 y! h( [; W- [4 Y4 h% v& }- [
8 J1 i9 N: w4 l8 _4 T9 T. d |
zan
|