一个简单的全排列的递归实现

 ̄綄美尐妖づ 提交于 2020-02-11 12:23:19
#include<cstdio>
int p[99], hashtable[99] = {false}, n;//数组p存储当前的排列,用hashtable[i]的真(/假)表示数i在当前排列p中出现(/没出现)过
//当前处理排列的第index位
void solvep(int index){
	if(index == n + 1){					//递归边界,已处理了前n位
		for(int i = 1; i <= n; i++)		//输出当前数列
			printf("%d", p[i]);
		printf("\n");
		return;
	}
	for(int i = 1; i <= n; i++){			//试图将1~n填入第index位中
		if(hashtable[i] == false){						
			p[index] = i;
			hashtable[i] = true;
			solvep(index + 1);
			hashtable[i] = false;
		}
	}
}
int main(){
	n = 4;
	solvep(1);
	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!