回溯法求全排列

回溯问题最重要的一点:恢复现场

//恢复现场 
st[i]=false;
A[cnt]=0;
cnt--;

完整代码(注释部分可以帮助理解):

#include
using namespace std;
const int N=1010;
int A[N];
bool st[N];
int n,cnt;
//回溯问题最重要的一点:恢复现场 
void display(int k)
{
	for(int i=1;i<=n;i++)
	{	
		if(!st[i])
		{
			st[i]=true;
			A[cnt++]=i;
			
//			printf("display(%d),递归前:\n",i);
//			printf("A数组:\n");
//			for(int i=0;i>n;
	
	display(1);
	
	return 0;	
} 

执行结果:

回溯法求全排列_第1张图片

你可能感兴趣的:(算法,c++,数据结构)