问题:只能输出前88种结果,最后四种(以(1,8)开始的点)没有输出
在QQ上与小伙伴讨论了一下也讨论不出是什么问题......QwQ
代码如下:
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;//x-1是x到1的距离;y减去x到1的距离,就是对角线上当x=1时y的值;此行判断y轴是否越界
if(p[y-(x-1)+j-1]==j)return 0;//j代表的是x的值,j最多只能取1~8,所以x轴不会越界
}
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;
}
求大佬指教!QwQ