八皇后求助
  • 板块学术版
  • 楼主幽灵特工
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/2/22 21:52
  • 上次更新2023/11/5 02:51:38
查看原帖
八皇后求助
332549
幽灵特工楼主2021/2/22 21:52

我的这份代码思路是用一个一维数组存棋盘。若设棋盘为一个平面直角坐标系,那么数组下标可表示纵坐标yy,数组某一项a[y]a[y]的值xx就是横坐标。

皇后冲突条件为:

(原有皇后坐标为 (a[i],i) (a[i],i),新添加的皇后坐标为(x,y)(x,y)

  • a[i]==x a[i]==x

  • a[i]i==yxa[i]-i==y-x

  • a[i]+i==x+ya[i]+i==x+y

代码如下,对输入8输出2342而不是正解92

#include<bits/stdc++.h>
using namespace std;
int n,a[20],ans=0;//棋盘建系,坐标为(x,y),即(a[i],i) 
bool check(int x,int y){
	for(int i=1;i<y;i++){
		if(a[i]==x||a[i]-i==x-y||a[i]+i==y+x)return 0;
	}
	return 1;
}
void Add_Queen(int x){
	for(int y=1;y<=n;y++){
		if(check(x,y)){
			a[y]=x;
			if(x+1<=n)Add_Queen(x+1);
			else{
				ans++;return;
			}
		}
	}
}
int main(){
	cin>>n;
	Add_Queen(1);
	cout<<ans;
} 
2021/2/22 21:52
加载中...