【深度优先搜索】输出1~n的全排列数

如果是1 2 3的全排列,那么可以直接用三重循环即可(判断等于前面出现过的数就continue)
如果是n个数呢?n是在程序中给出的,所以选择递归算法,深度优先搜索,代码如下:

//1-n排列  递归  深度优先搜索 
#include<bits/stdc++.h>
#define N 10
using namespace std;

void my_permutation(int n,int* a,int cur){
	int i,j;
	if(cur==n){
		for(i=0;i<n;i++){
			cout<<a[i];
		}
		cout<<endl;
	}else{
		for(i=1;i<=n;i++){
			for(j=0;j<cur;j++){
				if(a[j]==i) break;
			}
			if(j==cur){
				a[cur]=i;
				my_permutation(n,a,cur+1);
			}
		}
	}
} 

int main(){
	int n,a[N];
	while(scanf("%d",&n)==1){
		my_permutation(n,a,0);
	}
	return 0;
}

数据测试

5
12345
12354
12435
12453
12534
12543
13245
13254
13425
13452
13524
13542
14235
14253
14325
14352
14523
14532
15234
15243
15324
15342
15423
15432
21345
21354
21435
21453
21534
21543
23145
23154
23415
23451
23514
23541
24135
24153
24315
24351
24513
24531
25134
25143
25314
25341
25413
25431
31245
31254
31425
31452
31524
31542
32145
32154
32415
32451
32514
32541
34125
34152
34215
34251
34512
34521
35124
35142
35214
35241
35412
35421
41235
41253
41325
41352
41523
41532
42135
42153
42315
42351
42513
42531
43125
43152
43215
43251
43512
43521
45123
45132
45213
45231
45312
45321
51234
51243
51324
51342
51423
51432
52134
52143
52314
52341
52413
52431
53124
53142
53214
53241
53412
53421
54123
54132
54213
54231
54312
54321
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.zwX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值