八皇后

链接

N皇后问题,指的是在n * n 的棋盘上,放置n个皇后,使她们互相不能攻击的解法有多少种

皇后走法汇集了车和象的能力,走法极其灵活,我们需要使她们不能在同一行,同一列,同意斜线

由于要求所有解法,我们需要穷举

不妨从上到下,依次穷举,设一个数组visit,表示第i列已经被占了,这样可以保证每一列只有一个皇后。再设两个map容器fir和sec,分别表示从左上到右下和右上到左下的斜线

不难发现,同一斜线的截距相同,我们根据这一规律,可以保证一个斜线只有一个皇后

题目要求字典序排列前三个答案,不过我们这种方法已经是字典序了,所以不用管

#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;
void dfs(int& end,int dep,int& count,vector<int>&ans,int n,vector<bool>&visit,unordered_map<int,bool>&mp_fir,unordered_map<int,bool>&mp_sec) {
	if (ans.size() == n) {
		if (end < 3) {
			for (int num : ans) {
				cout << num << " ";
			}
			cout << endl;
		}
		count++;
		end++;
		return;
	}
	for (int i = 0;i < n;i++) {
		if (!visit[i]&&!mp_fir[i+dep]&&!mp_sec[i-dep]) {
			visit[i] = 1;
			mp_fir[i + dep] = 1;
			mp_sec[i - dep] = 1;
			ans.push_back(i + 1);
			dfs(end, dep + 1, count, ans, n, visit, mp_fir, mp_sec);
			visit[i] = 0;
			mp_fir[i + dep] = 0;
			mp_sec[i - dep] = 0;
			ans.pop_back();
		}
		
	}
}
int main() {
	int n;
	cin >> n;
	vector<bool>visit(n,0);
	unordered_map<int, bool>mp_fir,mp_sec;
	vector<int>ans;
	int count = 0;
	int end = 0;
	dfs(end, 0, count, ans, n, visit, mp_fir, mp_sec);
	cout << count;
}

时间复杂度:O(n!)

空间复杂度:O(n)

全部评论

相关推荐

2025-12-16 15:10
门头沟学院 C++
作为刚毕业的校招新人,本来还在焦虑二线城市难寻靠谱互联网工作,直到入职腾讯云智,才发现这里把企业文化和城市生活平衡得恰到好处~&nbsp;今天就来和牛友们好好分享我的真实体验!🌟&nbsp;无压力的文化氛围,新人也能很快融入刚入职时最怕&nbsp;“职场社恐”,但云智的氛围完全打破了我的顾虑。公司没有森严的层级感,面试官更像前辈交流而非拷问,入职后还分配了一对一导师,哪怕问基础问题也会耐心解答,完全不用怕打扰别人。日常工作节奏特别友好,不是躺平但也拒绝无意义内卷。忙的时候最多加班到八点,还有夜宵补贴,其余时间基本六点就能准时下班,有充足时间学习和生活。而且公司给新人配的都是&nbsp;Mac&nbsp;M4&nbsp;电脑&nbsp;+&nbsp;4K&nbsp;显示屏,腾讯&nbsp;iWiki&nbsp;知识库和内部录屏资料超丰富,跟着学很快就能上手项目,成长感很足。平时还有下午茶、部门聚餐,偶尔同事还会主动请喝奶茶,人文关怀真的很戳人。🌆&nbsp;二线城市的惬意生活,性价比拉满云智的基地都在西安、武汉、长沙、重庆这些二线城市,对我们新人太友好了!我&nbsp;base&nbsp;在武汉,房租比一线城市便宜一半还多,公积金按&nbsp;12%&nbsp;最高标准缴纳,加上房补、餐补,生活压力小了很多。下班和周末的时光完全属于自己。不像一线城市那样下班就只剩疲惫,在这里六点下班后,既能约朋友聚餐,也能回家玩游戏、学习,真正实现了&nbsp;work&nbsp;life&nbsp;balance。而且公司福利很齐全,补充医疗、重大疾病保险都有,甚至家属能优惠参保。💡&nbsp;给求职新人的真心建议如果和我一样不想卷一线,又想在靠谱平台积累经验,云智真的值得冲!这里既有腾讯的前沿技术资源和规范流程,又有二线城市的舒适生活节奏,企业文化包容又务实。现在每天上班有成就感,下班有生活感,这种&nbsp;“做喜欢的工作,过舒服的生活”&nbsp;的状态,大概就是打工人的理想模样吧~&nbsp;感兴趣的牛友可以大胆投递呀!
腾讯云智研发成长空间 5155人发布
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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