全排列(回溯法)

#include
int  hash[10]={0};//表示第i个数是否访问过 
int p[10];//存放排列 
int n;
void g(int index)//处理第index个位置
{
	//边界
	if(index==n+1)//输出全排列 
	{
		for(int i=1;i<=n;++i)
			printf("%d ",p[i]);
		printf("\n");
	} 
	
	
	for(int x=1;x<=n;++x)
	{
		if(hash[x]==0)//第i个数未访问
		{
			hash[x]=1;//设为访问
			p[index]=x;//第index个位置上放置i
			g(index+1);//处理第index+1个位置 
			hash[x]=0;//回溯 
		} 
	}
} 
int main()
{
	scanf("%d",&n);
	g(1);
	return 0;
}

你可能感兴趣的:(全排列(回溯法))