本帖最后由 aaron0919 于 2022-10-3 17:27 编辑
这我的#include<cstdio>
int vis[100],l[100],r[100];//竖列,两个斜线
int map[100][100];
int cnt;
void dfs(int x)
{
if(x > 8)
{
cnt++;
printf("No. %d\n",cnt);
for(int i = 1;i <= 8;i++)
{
for(int j = 1;j <= 8;j++)
{
printf("%d ",map[i][j]);
}
printf("\n");
}
return;
}
for(int i = 1;i <= 8;i++)
{
if(vis[i] == 0 && l[x+i] == 0 && r[x-i+8] ==0)//x-i有可能为负数
{
map[i][x] = 1;
vis[i] = 1;
l[i+x] = 1;
r[x-i+8] = 1;
dfs(x+1);
vis[i] = 0;
l[i+x] = 0;
r[x-i+8] = 0;
map[i][x] = 0;
}
}
}
int main()
{
dfs(1);
}
|