八皇后问题,为何没有按字典序输出
查看原帖
八皇后问题,为何没有按字典序输出
273056
splendid_followers楼主2021/11/26 13:57

RT, 蒟蒻求解

#include<bits/stdc++.h>
using namespace std;
bool line[100],d1[100],d2[100];//line列(写错了又懒得改)
//d1对角线1,d2对角线2
int hh[1000],sum;
//hh皇后位置
int x;
void sprintf()
{
	int i;
	sum++;
	if(sum<=3)//打印,<=3是为了方便对照
	{
		cout<<"No.";
		printf("%2d\n",sum);
		for(int i=1;i<=8;i++)
		{
			for(int j=1;j<=8;j++)
			{
				if(hh[i]==j)
				{
					cout<<"1";
				}
				else
				{
					cout<<"0";
				}
				if(j!=8)
				{
					cout<<" ";
				}
			}
			cout<<endl;
		}	
	}
	/*for(int i=1;i<=8;i++)
	{
		printf("%2.d %2.d\n",i,hh[i]);
	}*/
}
void sousuo(int n)
{
	//cout<<n<<endl;
	for(int i=1;i<=x;i++)
	{
		if((!line[i])&&(!d1[n-i+x-1])&&(!d2[i+n]))
		{
			//cout<<1<<endl;
			hh[n]=i;
			line[i]=1;
			d1[n-i+x-1]=1;
			d2[i+n]=1;
			if(n==x)
			{	
				sprintf();//打印
			}
			else
			{
				sousuo(n+1);
			}
			d1[n-i+x-1]=0;
			d2[i+n]=0;
			line[i]=0;//回溯
		}
		/*
		cout<<n;
		if(n==8)
		{
			return;
		}
		else
		{
			sousuo(n+1);
		}
		*/
	}
}
int main()
{
	cin>>x;
	sousuo(1);
	cout<<sum;
	return 0;
}

sum的结果是对的但是打印输出没有按照字典序 求解

2021/11/26 13:57
加载中...