我博客里有写过很多关于 n 皇后的教程,直接搜索关键字即可,这里就不多说了
- class Solution {
- public List<List<String>> ans = new ArrayList<List<String>>();
- public int path[] = new int[100];//path[i]表示第i行的皇后位置在第path[i]列
- public void dfs(int idx,int n) {//idx = 行
- int p;
- if(idx >= n) {
- List<String> check = new ArrayList<String>();
- for(int i = 0;i < n;i++) {
- String tmp = "";
- for(int j = 0;j < n;j++) {
- if(j == path[i])
- tmp += "Q";
- else
- tmp += ".";
- }
- check.add(tmp);
- }
- ans.add(check);
- return;
- }
- for(int i = 0;i < n;i++) {//枚举n列
- for(p = 0;p < idx;p++) {//和前k行皇后做比较
- if(path[p] == i || Math.abs(p - idx) == Math.abs(path[p] - i))
- break;
- }
- if(idx == p) {
- path[p] = i;
- dfs(idx + 1,n);
- }
- }
- }
- public List<List<String>> solveNQueens(int n) {
- ans.clear();
- dfs(0,n);
- return ans;
- }
- }