RT
(想试试用一维数组写八皇后结果写炸了)
求大佬指导qwq
(=・ω・=)
#include<cstdio>
using namespace std;
int p[10];//p[y]=x (x,y)
bool pd(int x,int y)//p[y]=x
{
for(int j=1;j<=8;j++)//判断横向有无皇后,枚举横坐标
{
if(p[y]==j)return 0;
}
for(int j=1;j<=8;j++)
{
if(p[j]==x)return 0;
}
for(int j=1;j<=8;j++)//从左下到右上的对角线
{
if(y-(x-1)+j-1==9)break;
if(p[y-(x-1)+j-1]==j)return 0;
}
for(int j=1;j<=8;j++)//从右下到左上的对角线
{
if(y-(8-x)+j-1==9)break;
if(p[y-(8-x)+j-1]==8-j+1)return 0;
}
return 1;
}
int num;
void _search(int y)//y即深度
{
if(y==9)
{
for(int i=1;i<=8;i++)printf("%d ",p[i]);
num++;
printf("\n");
return;
}
for(int i=1;i<=8;i++)
{
if(pd(i,y))
{
p[y]=i;
_search(y+1);
p[y]=0;
}
}
p[y]=0;
}
int main()
{
_search(1);
printf("\n%d",num);
return 0;
}
输出一共88种,与标答对比正好差了p[1]=8的4种......