八皇后

八皇后

同在左下->右上对角线上的坐标,行列序号之和为定值。
同在左上->右下对角线上的坐标,行列序号之差为定值。
所以可以用相同下标的数组表示某一对角线是否被占领。

#include<bits/stdc++.h>
using namespace std;

int n,Count=0;
int r[100]={0},c[100]={0},a[100]={0},b[100]={0};//行列 左上->右下对角线,左下->右上对角线 


void dfs(int i){//查找第i行 
	if(i>n){//找到解 
		if(Count<3){
			for(int j=1;j<=n;j++){
		    	printf("%d ",r[j]);
		    }
	    	cout<<endl;
		}
		Count++;
		return ;
	}
	for(int j=1;j<=n;j++){
		if((!c[j])&&(!a[i-j+n])&&(!b[i+j])){
			r[i]=j;//表示i行第j个占领
			c[j]=1;//j列已经占领
			a[i-j+n]=1;
			b[i+j]=1;//两条对角线占领 
			
			dfs(i+1);//找下一行 
			
			//清空标记,寻找下一组解 
			c[j]=0;
			a[i-j+n]=0;
			b[i+j]=0;
		}
	}
}
int main(){
	cin>>n;
	dfs(1);
	cout<<Count<<endl;
	return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务