#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int ans[8][8];
int n = 0;
bool pd(int x, int y)
{
// 横略,竖
for (int i = 0; i < 8; i++)
if (ans[i][y])
return false;
// 左斜右斜 abs(i-x)==abs(j-y)二维数组 i,j 与 x,y 是否斜线
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
if (abs(i - x) == abs(j - y) && ans[i][j])
return false;
return true;
}
void dfs(int x)
{
if (x == 8)
{
// cout<<"No."<<setw(2)<<++n<<'\n';
cout << "No. " << ++n << '\n';
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
cout << ans[j][i] << " ";
cout << '\n';
}
return;
}
for (int i = 0; i < 8; i++) // 第x行棋子放置的位置下标
{
if (pd(x, i))
{
ans[x][i] = 1;
dfs(x + 1);
ans[x][i] = 0;
}
}
}
int main()
{
dfs(0);
return 0;
}