n-queens(n皇后问题) ╰+哭是因爲堅強的太久メ 2022-09-02 04:29 170阅读 0赞 class Solution { public: /** * * @param n int整型 * @return int整型 */ int totalNQueens(int n) { vector<vector<string>> res; vector<string> cur(n, string(n, '.')); // 初始化棋盘,所有的位置都没有摆放皇后 dfs(res, cur, n, 0); return res.size(); } void dfs(vector<vector<string>> &res, vector<string> &cur, int &n, int row) { if (row == n) { // 当超出行数超出了棋盘,则把这次搜索的结果放入res中。 res.push_back(cur); return; } for (int j = 0; j < n; j++) { if (isValid(cur, n, row, j)) { // 判断在(row, j)处是否可以放一个皇后 cur[row][j] = 'Q'; // 如果可以,则放一个皇后 dfs(res, cur, n, row + 1); // 继续在下一行找一个位置放皇后 cur[row][j] = '.'; // 因为需要找到所有可能的情况,所以必然需要对每一行进行回退。去判断这一行的下一列是否可以放皇后。 } } } bool isValid(vector<string> &cur, int &n, int row, int col) { // 检查列 for (int i = 0; i < row; i++) { if (cur[i][col] == 'Q') { return false; } } // 检查反斜线 for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) { if (cur[i][j] == 'Q') { return false; } } // 检查斜线 for (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) { if (cur[i][j] == 'Q') { return false; } } return true; } }; # n-queens(n皇后问题) # > **题目链接:**[牛客网][Link 1] > **题目描述:** > N皇后问题是把N个皇后放在一个N×N棋盘上,使皇后之间不会互相攻击。 > 给出一个整数n,返回n皇后问题的所有摆放方案 > 例如: > 4皇后问题有两种摆放方案 题目解析:这个问题就是n个皇后摆放在n\*n的棋盘格中,使得横、竖和两个对角线方向均不会同时出现两个皇后。这道题我一直都不会做,于是学习了牛客网黄汉韬的做法。 首先将所有的位置都置为没有放置皇后。 用递归的方法从第一行开始,判断该点能否放置皇后,如果可以则说明这一行就只能这么放置了,然后递归进入下一行,当行数为n时则说明超出了棋盘,说明当前摆放符合n皇后问题,则加入摆放规则。同时跳出这一层的递归,因为要找出所有的方法,所以将该位置重新置为没有放置皇后,然后继续跳出递归,遍历该行的下一个位置能否符合。利用这种递归将会遍历完整个棋盘的所有摆放方式。因为对于每一行的每一个点,都会遍历从它往下的任意一种可能性。 [Link 1]: https://www.nowcoder.com/practice/c77ac599d0764433a5946610a7626768?tpId=46&tqId=29128&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking
相关 皇后问题 问题 > 国际象棋中的皇后,可以横向、纵向、斜向移动。如何在一个NXN的棋盘上放置N个皇后,使得任意两个皇后都不在同一条横线、竖线、斜线方向上? 举个栗子,下图的绿色格 Bertha 。/ 2022年12月06日 12:52/ 0 赞/ 167 阅读
相关 算法分析---8皇后问题---N皇后问题 ![在这里插入图片描述][20210406171121133.png] package demo1; public class NkingsSort 一时失言乱红尘/ 2022年11月16日 05:51/ 0 赞/ 169 阅读
相关 八皇后问题 一、问题描述 ![Center][] 在8x8的国际棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能同一行、同一列、同一斜线上。 八皇后问题可以扩展为n ╰+哭是因爲堅強的太久メ/ 2022年07月14日 00:17/ 0 赞/ 198 阅读
相关 八皇后问题 回溯法求解八皇后问题 n皇后问题:n皇后问题是指在一个n\n的国际象棋棋盘上放置n个皇后,使得这n个皇后两两不在同一行,同一列,同一条对角线上,求合法的方案数。 如 小灰灰/ 2022年06月11日 08:49/ 0 赞/ 261 阅读
相关 八皇后问题 枚举法 include<iostream> using namespace std; int a[9]; int check(int n, 蔚落/ 2022年06月06日 00:38/ 0 赞/ 216 阅读
相关 八皇后问题 在国际象棋中,皇后是最强大的一枚棋子,可以吃掉与其在同一行、列和斜线的敌方棋子.八皇后问题是这样一个问题:将八个皇后摆在一张8\8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇 Bertha 。/ 2022年05月18日 05:58/ 0 赞/ 215 阅读
相关 N 皇后问题 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。 每一种解法包 喜欢ヅ旅行/ 2022年05月17日 04:52/ 0 赞/ 217 阅读
相关 皇后问题 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横 绝地灬酷狼/ 2022年04月13日 12:28/ 0 赞/ 209 阅读
相关 八皇后问题 include <iostream> include <cmath> include <cstring> using namespace std 港控/mmm°/ 2022年01月31日 00:29/ 0 赞/ 282 阅读
相关 八皇后问题 八皇后问题,以国际象棋为背景:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任意两个皇后都不能处于 叁歲伎倆/ 2021年09月25日 15:34/ 0 赞/ 446 阅读
还没有评论,来说两句吧...