洛谷p1219八皇后问题 dfs+回溯

洛谷p1219八皇后问题
题目链接
代码如下

#include
#include
#include
using namespace std;
int h[100],l[100],c[100],d[100];//分别代表行列左下到右上,左下到右上 
int sum,n;//sum
int print()
{
	if(sum<=2)
	{
		for(int m=1;m<=n;m++)
		printf("%d ",h[m]);
		printf("\n");
	}
	sum++;
}
void dfs(int i)//包括搜索和回溯
{
	if(i>n)
	{
		print();
		return ;
	}
	else
	for(int j=1;j<=n;j++)
	{
		if((!l[j])&&(!c[i+j])&&(!d[i-j+n]))
		//i-j+n的原因是防止出现负值
		//相当每个孤立的点都是四个身份 
		{
			h[i]=j;//宣布占领
			l[j]=1;
			c[i+j]=1;
			d[i-j+n]=1;
			//接下来就该继续往下走了,找下一个皇后 
			dfs(i+1); 
			//回溯 
			l[j]=0;
			c[i+j]=0;
			d[i-j+n]=0;
		 } 
		
	}
 } 

int main()
{
	scanf("%d",&n);
	dfs(1);//从第一个开始
	printf("%d",sum);
	return 0; 
 } 

你可能感兴趣的:(ACM)