目录

  • 题目描述
  • 问题分析

题目描述

问题分析

何为不能攻击?攻击范围:同行、同列、同对角线。在除此以外的位置安全。

所以需要对棋盘进行数字化表示,我们将棋盘看作是一个矩阵,安全位置用0占位,受攻击位置为1,且攻击位置在皇后所在位置的临近8个方向。在此方向上遍历棋盘将所有攻击位置至1:

放置皇后的功能函数:

class Solution {public:vector<vector<string>> solveNQueens(int n) {vector<vector<string>> result;//存放最终结果vector<vector<int>>mark;//标记棋盘,客房置位置为0,不可放置为1vector<string>location;//记录某一次存放的位置   Q//初始化for (int i = 0; i < n; i++) {mark.push_back(vector<int>());for (int j = 0; j < n; j++) {mark[i].push_back(0);}location.push_back("");location[i].append(n, '.');}generate(0, n, location, result, mark);return result;}
private://放置皇后的功能函数void put_down_the_queue(int x, int y, vector<vector<int>>& mark) {//方向static const int dx[] = { -1,1,0,0,-1,-1,1,1 };static const int dy[] = { 0,0,-1,1,-1,1,-1,1 };mark[x][y] = 1;//皇后位置设为1//遍历棋盘,找出皇后可以攻击的位置for (int i = 1; i < mark.size(); i++) {//8个方向上for (int j = 0; j < 8; j++) {int new_x = dx[j] * i + x;int new_y = dy[j] * i + y;if (new_x < mark.size() && new_x >= 0 && new_y < mark.size() && new_y >= 0) {mark[new_x][new_y] = 1;}}}}//k记录皇后个数(正在放置第k行位置上的皇后)void generate(int k, int n, vector<string>& location, vector<vector<string>>& result, vector<vector<int>>& mark) {//递归结束的条件if (k == n) {result.push_back(location);return;}//遍历k行上的i列for (int i = 0; i < n; i++) {//如果能放置if (mark[k][i] == 0) {vector<vector<int>>temp_mask = mark;//记录回溯前的marklocation[k][i] = 'Q';//记录当前皇后位置put_down_the_queue(k, i, mark); //放置新皇后[]//若可执行generate(k + 1, n, location, result, mark);//递归下一行皇后位置//不可执行mark = temp_mask;//将mark重新赋值为回溯前状态location[k][i] = '.';//重置该位置皇后信息}}}
};

力扣—— 51. N 皇后相关推荐

  1. 力扣刷题记录-回溯算法相关题目

    首先介绍一下回溯算法 回溯通常在递归函数中体现,本质也是一种暴力的搜索方法,但可以解决一些用for循环暴力解决不了的问题,其应用有: 1.组合问题: 例:1 2 3 4这些数中找出组合为2的组合,有1 ...

  2. 代码随想录刷题|LeetCode 332.重新安排行程 51. N皇后 37. 解数独

    目录 332.重新安排行程 思路 重新安排行程 51. N皇后 思路 N皇后 37. 解数独 思路 解数独         这三道题目都是困难题目,都是根据代码随想录的思路总结书写,慢慢理解,慢慢熟练 ...

  3. 力扣算法刷题Day30|回溯:重新安排行程 N皇后 解数独

    力扣题目:#332.重新安排行程 刷题时长:参考题解 解题方法:回溯法 + 哈希表 复杂度分析 时间 空间 问题总结 无思路 本题收获 难点 避免死循环:去过的to机场及时删除 记录映射关系:哈希表, ...

  4. LeetCode 49字母异位词分组50pow(x,n)51八皇后

    原创公众号:bigsai 如果不错记得点赞收藏! 关注回复 bigsai 领取Java进阶pdf资源,回复进群加入力扣打卡群. 上周打卡内容:43字符串相乘&44通配符匹配 45跳跃游戏&am ...

  5. 代码随想录算法训练营第30天 | 51. N皇后 37.解数独 332.重新安排行程 回溯篇小结

    代码随想录系列文章目录 回溯篇 - 棋盘问题 图的dfs 文章目录 代码随想录系列文章目录 51.N皇后 37.解数独 332.重新安排行程 回溯篇小结 51.N皇后 题目链接 这道题的思路是什么样的 ...

  6. 算法训练day24 | php | 332.重新安排行程 , 51. N皇后 , 37. 解数独 ,总结

    一.力扣题332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点.请你对该行程进行重新规划排序. 所有这些机 ...

  7. 51. N 皇后(回溯算法)

    n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案. 每一种解法包含一个不同的 n 皇后问 ...

  8. LeetCode 1244. 力扣排行榜(map+multiset)

    文章目录 1. 题目 2. 解题 1. 题目 新一轮的「力扣杯」编程大赛即将启动,为了动态显示参赛者的得分数据,需要设计一个排行榜 Leaderboard. 请你帮忙来设计这个 Leaderboard ...

  9. LeetCode 51. N皇后 / 52. N皇后 II(回溯)

    1. 题目 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案 ...

最新文章

  1. Xcode:Task failed with exit 1 signal 0 {
  2. mysql 5.8 新特性_MySQL 5.4的新特性解析
  3. [zjoi2015]幻想乡战略游戏
  4. 华为p40pro怎么用鸿蒙,数码知识:华为p40pro是鸿蒙系统吗系统版本
  5. redis管理_Redis基本管理
  6. c#调用c++ dll const char* String类型转换问题。传值,与接收返回值问题
  7. 湖南联通云计算与IDC掀发展浪潮
  8. AJAX IE7清除缓存
  9. 用户行为监控(Piwik)
  10. 阿里菜鸟愚人节最新力作,高大上宠物递送萌翻铲屎官
  11. IIS:System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限已失败。
  12. eclipse “http://mybatis.org/dtd/mybatis-3-config.dtd“>爆红
  13. IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
  14. Echarts隐藏YX轴、刻度、网格线和数据
  15. python小白用哪个版本好_完全小白Python极速入坑指南
  16. 重磅 联想企业网盘发布全新功能!
  17. 【LINGO】lingo 软件简介
  18. 如何看待2023届,秋招面临的形势?
  19. Linux下PCI转串口卡驱动安装方法
  20. 基于飞桨实现手写数字识别2

热门文章

  1. 遍历循环的高级用法(好简单...)
  2. oracle result_cache_max_size,当设置RESULT_CACHE_MAX_SIZE参数并且重启过database后,Query Result Cache 还是被禁用的。...
  3. complex类模板c++_高中地理综合题答题模板,学霸们都收藏了!
  4. excel多列多行堆叠成多列一行_「Excel技巧」如何利用indirect函数快速将一列转为多行多列排版...
  5. angular 控件css_Angular父组件内修改子组件的样式
  6. ios 动画 隐藏tabbar_iOS_自定义转场TabBar的隐藏动画
  7. centos7 开机启动文件路径_centos7定时运行python脚本
  8. 修改caffe源码--支持多标签--关键点检测
  9. 第3个项目实操:用类与对象的方法编程
  10. L - Oil Deposits