1-n的全排列

借鉴链接:点击打开链接

dfs:深度优先遍历:先遍历1,具体看大佬的图片;

大佬代码:

/*#include<iostream>
using namespace std;
// dfs 深度优先遍历;  
int a[100];
void dfs(int cur,int n){
	if(cur==n){//递归边界,说明填完了; 
		for(int i=0;i<n;i++)//一个一个的输出 
			cout<<a[i]<<" ";
		cout<<endl;
	} 
	for(int i=1;i<=n;i++){//把1-n填入; 
		int ok=1;
		for(int j=0;j<cur;j++){//遍历目前a数组的元素,判断当前这个这个数有没有填过 
			if(a[j]==i)
				ok=0;
		}
		if(ok==1){
			a[cur]=i;//没有填过就填,把它放在a数组的里面数字的后面 
			dfs(cur+1,n);//再排a数组元素里面的第cur+1个位置 
		}
	}
} 

int main(){
	int n;
	cin>>n;
	dfs(0,n);
	return 0;
} 

*/
#include<iostream>
using namespace std;
int visit[100];
int a[100];
void dfs(int index,int n){
	if(index==n){
		for(int i=0;i<n;i++)
			cout<<a[i]<<" ";
		cout<<endl;
	 	return;
	}

for(int i=1;i<=n;i++){
	if(visit[i]==0){
		visit[i]=1;
		a[index]=i;
		dfs(index+1,n);
		visit[i]=0;
	}
}
}

int main(){
	int n;
	cin>>n;
	dfs(0,n);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40728285/article/details/80264077