求助,蒟蒻写八皇后,最后4种情况硬是出不来
  • 板块学术版
  • 楼主Kio_
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/8/14 08:05
  • 上次更新2023/11/6 20:22:09
查看原帖
求助,蒟蒻写八皇后,最后4种情况硬是出不来
127925
Kio_楼主2020/8/14 08:05

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;
 } 

输出一共8888种,与标答对比正好差了p[1]=8p[1]=844种......

2020/8/14 08:05
加载中...