n=6和8的样例都没问题,但结果全WA了,求助
查看原帖
n=6和8的样例都没问题,但结果全WA了,求助
868555
neto楼主2023/5/3 17:13
#include <iostream>
using namespace std; 
int a[14]; 
//a[i]表示第i行的皇后放在第i列,a数组的下标表示行数,内容是列数 
bool b[14]={0},c[26]={0},d[26]={0};
//b,c,d分别控制同一列,同一右对斜线,同一左对斜线 
int n,total=0;
void print()  //用于打印每行皇后的位置 
{
	for(int i=1;i<=n;i++)
	{
		printf("%d  ",a[i]);
	}
	printf("\n");
 } 
 void search(int i)
 {
 	for(int j=1;j<=n;j++) //n列逐个尝试 
 	{
 		if(!b[j]&&!c[i+j]&&!d[i-j+n-1])
 		{
 			a[i]=j;
 			b[j]=1;
 			c[i+j]=1;
 			d[i-j+n-1]=1;
 			if(i==n)  
			 { 
			   total++;
			   if(total<=3)  print();
			 }
			  //如果都摆放完,则输出,此处为递归边界 
 			   else  search(i+1);  //否则回溯 
 			a[i]=0;
 			b[j]=0;
 			c[i+j]=0; 
 			d[i-j+n-1]=0;
 			
 			
		 }
	 }
 }
 int main()
 {
 	scanf("%d",&n);
 	search(1);
 	printf("%d\n",total);
 	return 0;
 }

2023/5/3 17:13
加载中...