请大佬帮忙看看问题,样例过不去,打了注释
查看原帖
请大佬帮忙看看问题,样例过不去,打了注释
421265
eastcloud楼主2021/3/3 21:05
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int num[14][14];
struct zb{//记录每个点的坐标
	int x;
	int y;
}l[14];
int n,c;
void tianse(int x,int y,int a){//标记点
	for(int i=1;i<=n;i++) num[x][i]=a;
	for(int i=1;i<=n;i++) num[i][y]=a;
	for(int i=x,j=y;i<=n,j<=n;i++,j++)num[i][j]=a;
	for(int i=x,j=y;i>0,j>0;i--,j--)num[i][j]=a;
}
void dfs(int t){
	if(t>n){//判断次数
		if(c<3){
			c++;
			for(int i=1;i<=n;i++) cout<<l[i].x<<' ';//输出结果
			cout<<endl;
		}
		else c++;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(num[i][j]==0){
				tianse(j,i,1);//寻找为0,不会被其他皇后吃的点,这里是标记找到点之后将皇后可以吃的点全部标记
				l[t].x=i;
				l[t].y=j;//标记
				dfs(t+1);搜索
				l[t].x=0;//回溯
				l[t].y=0;
				tianse(j,i,0);将点清零
			}
			else continue;
		}
	}
}
int main(){
	cin>>n;
	dfs(1);//回溯
	cout<<c;
	return 0;
}
2021/3/3 21:05
加载中...