n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例:
输入: 4
输出: [
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。
思路:经典的回朔算法,写的比较丑陋,见谅。。。。
class Solution {List> ans=new ArrayList>();List res=new ArrayList();boolean[][] flag=new boolean[30][30];boolean[] mark=new boolean[30];public List> solveNQueens(int n) {dfs(n,n,0);return ans;} private void dfs(int num,int n,int row){if(num==0){StringBuilder tmp=new StringBuilder();for(int i=0;i(res));res.clear();return;}for(int i=0;i=0 && y>=0){if(flag[x][y]){isOk=false;break;}x--;y--;}x=row-1;y=col+1;while(x>=0 && y}