- 在线时间
- 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
- 自我介绍
- 往往
 |
3 X8 O; n0 q0 x7 z4 s1 n( [9 Y0 Z$ D- l+ u: d
+ S' a. Z1 P" b7 J3 G$ y
/*7 a2 Y8 H9 E7 @/ y
使用递归方法求全排列' x& _( Z w+ W$ ^; n! ~$ c- \
*/8 h* }0 _0 E/ k+ t
! k ?+ I/ C6 `, v
#include<stdio.h># o- m; M2 |: z; s4 r/ {
: U+ U! `( p: d" tint sum=0;. m1 S* ^4 h) D w* {6 V+ U
int main(){
6 p4 C0 b9 Q; B& s8 b7 p+ w int n,i;
) ]* D, z3 J+ V* T( W9 k- n char *p;! L, N# ` h9 {# D( ^0 W! o
void perm(char *,int,int);
- [+ w( o7 U7 {; ~
% r2 S7 K$ C4 D+ ]5 K* f scanf("%d",&n);9 e1 t- n1 T+ P# o$ H( {
p=new char[n];4 [6 X. v8 [, I( g& y
for(i=0;i<n;i++){2 }& a# v+ ]# F" c
getchar();2 l: i% h; z" }0 ?
scanf("%c",p+i);2 D; U, T& ^2 O
}
' R5 ?' D$ O* j6 _$ M7 I1 n. }5 A# s. J
perm(p,0,n-1);
9 X2 A' h. |. V# Z3 a2 z printf("==>%d",sum);: Y1 _ L+ r. h" C% s: r
5 `7 a, h) d5 T) R return 0;
. t/ O. j5 B1 t; Y5 w}
# b6 ]5 b% v' F; |$ b$ h0 K8 S L% [8 k* b* _% r$ n$ `
void perm(char *p,int s,int e){
8 A4 b4 F' ?# X/ U int i;
/ Y4 }2 R U2 m' w; a void swap(char*,char*);
' F0 o4 ]- p. u$ t( j* T5 n) F( X ! c; D) K' Y7 V: _. W/ [
if(s==e){
2 R. G" b$ i! V c- x" k7 w9 N printf("%s\n",p);
+ j& [, i* ~) v. i, y. R5 [! _ sum++;
3 q- ^6 J3 i' Z& ?# k! w2 ? return ;
3 T" t7 u4 @1 W" `! P }: S. T( j, Y) L& j. U
else{3 P8 R' ]! A* a+ A7 U$ t- }) b
for(i=s;i<=e;i++){* B; n7 |) Q) f
swap(p+s,p+i);. V* B6 r9 ?' b3 N
perm(p,s+1,e);
/ a+ f5 m+ h0 @% r1 _ swap(p+s,p+i);
" d; j$ E d% ?4 |- i8 k3 T0 V }7 q! W0 C- A2 B# V; `! |$ n
}
) C8 m8 s I& R, f* f8 Q% `}$ x; x) n$ Z4 x$ _3 @8 Y
. T* W; u& I# u D/ X, _void swap(char *a,char *b){
/ ~0 r1 A5 w. z% E( l2 o6 c int tmp=*a;- x3 R% i! w, l% L. Z, I2 G. U
*a=*b;& ^' N8 M# p+ o: d: \4 z, l
*b=tmp;
2 {( W4 s* N4 w* S& i( ?}
8 `( b+ A# M9 p% D5 ]( t. R5 w; B L
======================================================================6 o3 q+ O v' y7 |# S8 l. [% p
1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。 m: x; G1 d8 U6 L5 I8 [2 n& a1 }
2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!
, R% X1 ]) d5 r u5 A) p7 m. t8 q8 ^$ u& l+ P
5 M, |- P( J4 X: z* R
! T) X) X$ I) r% w, `" r |
zan
|