尝试用一维数组写八皇后
  • 板块学术版
  • 楼主Kio_
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/8/15 17:55
  • 上次更新2023/11/6 20:11:45
查看原帖
尝试用一维数组写八皇后
127925
Kio_楼主2020/8/15 17:55

问题:只能输出前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

2020/8/15 17:55
加载中...