全排列(回溯,字典序)

分数 10

作者 c++课程组

单位 湖州师范学院

对于1~n这n个不同的数,按照一定的顺序把这n个数排列起来(每个数出现一次,且不重复, n<10),将所有的排列列出,称为全排列。

输入格式:

一个数n。

输出格式:

1~n的全排列,每个排列一行(按字典序输出)。

输入样例:

3

输出样例:

1 2 3 
1 3 2 
2 1 3 
2 3 1 
3 1 2 
3 2 1 
#include<bits/stdc++.h>
using namespace std;
int n;
int a[10],b[10],vis[10];
	void DFS(int step){
		if(step==n){
			for(int i=0;i<n;i++)cout<<b[i]<<" ";
			cout<<endl;
		}
		else {
			for(int i=0;i<n;i++){
				if(vis[i]==0){
					b[step]=a[i];
					vis[i]=1;
					DFS(step+1);
					vis[i]=0;
				}
			}
			
		}
	}
signed main(){
		cin>>n;
		for(int i=0;i<n;i++)a[i]=i+1;
		DFS(0);
		return 0;
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐