百练2698 八皇后

百练2698 八皇后

/*
注意输出时是列优先输出
否则会WA 
*/
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int queen[10],ncase=1;
bool legal(int depth,int n)
{
	int i;
	for(i=1;i<depth;i++)
		if(n==queen[i]||((int)fabs((double)n-(double)queen[i])==depth-i))
			return false;
	return true;
}
void print()
{
	cout<<"No. "<<(ncase++)<<endl;
    int i,j,map[9][9];
	memset(map,0,sizeof(map));
	for(i=1;i<=8;i++)
		map[i][queen[i]]=1;
	for(i=1;i<=8;i++)
	{
         for(j=1;j<=8;j++)
         {
               if(j==1)cout<<map[j][i];
               else cout<<" "<<map[j][i];                 
         }                
         cout<<endl;
     }
}
void DFS(int depth)
{
	if(depth>8) return;
	int i;
	for(i=1;i<=8;i++)
	{
		if(legal(depth,i))
		{
			queen[depth]=i;
			DFS(depth+1);
			if(depth==8)
				print();
		}
	}
}
int main()
{
	//	freopen("output.txt","w",stdout);
	    DFS(1);
		return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注