- 在线时间
- 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
- 自我介绍
- 往往
 |
1 c' M0 s6 K" X' r0 Q5 t2 }
+ N1 ?1 B+ k* c. I# v
: {9 h u' K% R9 \; i/*
. U9 D; P! O# W R) [* O* F% r/ m使用递归方法求全排列0 Q; s, o/ S9 T+ Z& L
*/: Y6 B! s# u1 M! @5 B& c0 w; p
! W! u% |3 C1 y! T/ M# p
#include<stdio.h>& q, d, E# a8 o
7 j) ?) r9 Q7 Y' ^& ]7 V
int sum=0; }7 @, |$ L: ^, z, W. X
int main(){- |( ]; w% D4 _
int n,i;
8 i, m. U+ b6 |5 T$ r# O3 W8 u* W4 ] char *p;- x, J0 Y2 ^& [- E0 K" r0 P
void perm(char *,int,int);2 q' y( D* _5 v8 v% n; c* d
: [0 m. f8 C: n! n& m
scanf("%d",&n); C$ x. S9 V' x, ~$ e+ T* f
p=new char[n];# l* F" h- y, s! _/ a
for(i=0;i<n;i++){* P& ]( |1 M: L; u8 p
getchar();( n) Z( q9 |# \' ?0 Y/ f; c
scanf("%c",p+i);
8 G9 Y7 R: {- O/ x- N }: P8 p0 N# M2 k, A
+ A3 i) n! [; J: a3 I+ Q perm(p,0,n-1);0 y# @2 S+ R; O
printf("==>%d",sum);% \+ D6 ?( W1 V, I9 E9 w0 v
m$ T" q2 I0 N( s( @3 Z return 0;0 x1 t/ v9 L: N
}2 ?! J% _. O9 d; O) I: a
6 M& t# ~ F# x* g: y1 J9 Avoid perm(char *p,int s,int e){
) U' M. D+ [/ Y6 a7 K, s4 ~ int i;8 X. @& t; D% | b0 h
void swap(char*,char*);
* D( v/ t% X$ c2 ]% |8 c: w . Z) Y1 Z, z& l- @' g$ G+ e
if(s==e){/ D+ `( u" N& s
printf("%s\n",p);* @9 }; \$ V! {
sum++;/ [& H5 ?1 W4 w M4 m* k+ y. l
return ;# E0 D; d0 x y9 _9 @
}
0 p0 y/ t0 D# S% T2 {1 r; {8 B else{
: ~) {$ l( a0 u0 m* J* s for(i=s;i<=e;i++){
6 [+ v+ s/ R0 e+ L# @1 O swap(p+s,p+i);
' `$ n1 ~/ s: _ e6 M* f perm(p,s+1,e);/ H; |% @. T8 Y
swap(p+s,p+i);+ ?0 `4 o$ h ^+ l
}
2 c/ b) ^5 u [* E7 m }4 K: [1 a5 p. a) l$ q, p
}) Q y6 E, `2 C5 [6 @
, V) [; R' }/ X8 P& @# d
void swap(char *a,char *b){
2 p* z" v. |, u j! z: s int tmp=*a;
# j0 F* t4 U8 H5 C: w *a=*b;: Z) Q7 S- R5 V! O; i
*b=tmp;
" S' ?3 A* {8 l3 B8 Z0 F}
" J3 i: `1 k, y% r" Q& P
6 n# V3 I% l8 I3 g======================================================================
. R4 v. L5 k( R* j6 G+ T 1.关于思路:当仅有一个元素时,全排列就是它自己本身一个;对于多个元素的序列,其全排列为去掉某个元素的全排列,再在这些全排列序列中加入该元素(如果某一个排列序列包含n个元素,那么加入的方案就有n+1个),这等价于每个元素做打头元素,后续的子序列的全排列,而for循环就是体现这一点。) D0 ^9 I' q& W9 f ^2 l! c
2.关于输出:一开始我怎么也找不到输出的好办法!第一是尝试在下一层递归前输出字符,发现不行;后来在递归回来后再输出一次,还是不行……总之尝试了很多次都没有效果。最后从另一位大神中才想到有直接输出字符串的控制符!坑呐,说明自己对语法不够熟练,加紧练习!7 R5 E4 x+ y# Y$ R& j
2 I: S7 e1 C4 ~
9 h! R% t: i# s6 h* b- ^1 k/ \7 o
|
zan
|