#include<iostream>
using namespace std;
bool vis[3][20];//记忆数组判断列,主对角线,副对角线是否被占
int ans=0,num=1;
int p=0,pos[8];
void dfs(int cur);
void print();
int main()
{
dfs(1);//初始化cur为0,即从第一行开始
return 0;
}
void dfs(int cur)
{
if(cur>8)//如果当前行数超过8(表明八个皇后已经放好)则结果加一,返回继续递归
{
ans++;
print();
return;
}
//vis[0][i]判断列,vis[i][cur-i+8]判断主对角线,vis[2][cur+i]判断副对角线
for(int i=1;i<=8;i++)
if(!vis[0][i]&&!vis[1][cur-i+8]&&!vis[2][cur+i])
{
pos[p++]=i;
vis[0][i]=vis[1][cur-i+8]=vis[2][cur+i]=true;
dfs(cur+1);//深度搜索
vis[0][i]=vis[1][cur-i+8]=vis[2][cur+i]=false;
p--;
}
}
void print()
{
int i,j;
cout<<"No. "<<num++<<endl;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
if(i==pos[j]-1)
cout<<"1 ";
else
cout<<"0 ";
cout<<endl;
}
/*for(i=0;i<8;i++)
cout<<pos[i];
cout<<endl;*/
}
using namespace std;
bool vis[3][20];//记忆数组判断列,主对角线,副对角线是否被占
int ans=0,num=1;
int p=0,pos[8];
void dfs(int cur);
void print();
int main()
{
dfs(1);//初始化cur为0,即从第一行开始
return 0;
}
void dfs(int cur)
{
if(cur>8)//如果当前行数超过8(表明八个皇后已经放好)则结果加一,返回继续递归
{
ans++;
print();
return;
}
//vis[0][i]判断列,vis[i][cur-i+8]判断主对角线,vis[2][cur+i]判断副对角线
for(int i=1;i<=8;i++)
if(!vis[0][i]&&!vis[1][cur-i+8]&&!vis[2][cur+i])
{
pos[p++]=i;
vis[0][i]=vis[1][cur-i+8]=vis[2][cur+i]=true;
dfs(cur+1);//深度搜索
vis[0][i]=vis[1][cur-i+8]=vis[2][cur+i]=false;
p--;
}
}
void print()
{
int i,j;
cout<<"No. "<<num++<<endl;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
if(i==pos[j]-1)
cout<<"1 ";
else
cout<<"0 ";
cout<<endl;
}
/*for(i=0;i<8;i++)
cout<<pos[i];
cout<<endl;*/
}