递归实现全排列

时间秒杀一切 提交于 2020-02-08 04:46:39

递归的原理和实现方法是很基础的就不再说明了。

直接上题

#include<cstdio>
const int maxn=11;
//P记录当前排列,hash记录x是否在P中 
int n,P[maxn],hashTable[maxn]={false};
//当前处理排列的第index位 
void Func(int index){
	if(index==n+1){//递归边界 
		for(int i=1;i<=n;i++){
			printf("%d",P[i]);
		} 
		printf("\n");
		return;
	}
	for(int x=1;x<=n;x++){
		if(hashTable[x]==false){
			P[index]=x;
			hashTable[x]=true;
			Func(index+1);
			hashTable[x]=false;// 
		}
	}
}
int main(){
	n=3;
	Func(1);
	return 0;
}

应该可以看懂。。。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!