51. N 皇后

发布时间:2024年01月10日

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。

n?皇后问题?研究的是如何将?n?个皇后放置在?n×n?的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数?n?,返回所有不同的?n?皇后问题?的解决方案。

每一种解法包含一个不同的?n 皇后问题?的棋子放置方案,该方案中?'Q'?和?'.'?分别代表了皇后和空位。

示例 1:

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:[["Q"]]

提示:

?

  • 1 <= n <= 9

mp < rowSize && jTmp >= 0) {

? ? ? ? ? ? if (iTmp == mTarget && jTmp == nTarget) {

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? ? ? iTmp++;

? ? ? ? ? ? jTmp--;

? ? ? ? }

? ? ? ? //-1,+1

? ? ? ? iTmp = isrc - 1;

? ? ? ? jTmp = jsrc + 1;

? ? ? ? while (iTmp >= 0 && jTmp < colSize) {

? ? ? ? ? ? if (iTmp == mTarget && jTmp == nTarget) {

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? ? ? iTmp--;

? ? ? ? ? ? jTmp++;

? ? ? ? }

? ? ? ? //-1,-1

? ? ? ? iTmp = isrc - 1;

? ? ? ? jTmp = jsrc - 1;

? ? ? ? while (iTmp >= 0 && jTmp >= 0) {

? ? ? ? ? ? if (iTmp == mTarget && jTmp == nTarget) {

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? ? ? iTmp--;

? ? ? ? ? ? jTmp--;

? ? ? ? }

? ? ? ? return true;

? ? }

? ? bool isCheck(vector<vector<bool>>& visited, int row, int col) {

? ? ? ? for (int i = 0; i < visited.size(); i++) {

? ? ? ? ? ? for (int j = 0; j < visited[0].size(); j++) {

? ? ? ? ? ? ? ? if (false == visited[i][j]) {

? ? ? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if (i == row || j == col) {

? ? ? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if (isVisited(visited.size(), visited[0].size(), i, j, row,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? col) == false) {

? ? ? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return true;

? ? }

? ? void backTrack(int n, int row, vector<vector<bool>>& visited) {

? ? ? ? if (row >= n) {

? ? ? ? ? ? vector<string> vec;

? ? ? ? ? ? for (int i = 0; i < n; i++) {

? ? ? ? ? ? ? ? string str = "";

? ? ? ? ? ? ? ? for (int j = 0; j < n; j++) {

? ? ? ? ? ? ? ? ? ? if (visited[i][j] == true) {

? ? ? ? ? ? ? ? ? ? ? ? str += "Q";

? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? str += ".";

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? vec.push_back(str);

? ? ? ? ? ? }

? ? ? ? ? ? ret.push_back(vec);

? ? ? ? ? ? return;

? ? ? ? }

? ? ? ? for (int i = 0; i < n; i++) {

? ? ? ? ? ? if (visited[row][i] == true) {

? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? }

? ? ? ? ? ? if (isCheck(visited, row, i) == false) {

? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? }

? ? ? ? ? ? visited[row][i] = true;

? ? ? ? ? ? backTrack(n, row + 1, visited);

? ? ? ? ? ? visited[row][i] = false;

? ? ? ? }

? ? }

? ? vector<vector<string>> solveNQueens(int n) {

? ? ? ? vector<vector<bool>> visited(n, vector<bool>(n, false));

? ? ? ? backTrack(n, 0, visited);

? ? ? ? return ret;

? ? }

?

文章来源:https://blog.csdn.net/yinhua405/article/details/135493801
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。