题目
思路
-
代码
List<List<String>> res;List<String> list;int[][] visited;char[] arr;public List<List<String>> solveNQueens(int n) {res = new ArrayList<>();list = new ArrayList<>();visited = new int[n][n];arr = new char[n];for (int i = 0; i < n; i++) {arr[i] = '.';}dfs(n, 0);return res;}public void dfs(int n, int m) {if (m == n && list.size() < n) return;if (m == n && list.size() == n) {res.add(new ArrayList<>(list));return;}for (int i = 0; i < n; i++) {if (visited[m][i] > 0) continue;arr[i] = 'Q';//添加字符串list.add(new String(arr));arr[i] = '.';//设置不可访问位for (int j = m, l = i, r = i; j < n; j++, l--, r++) {visited[j][i]++;if (l >= 0) visited[j][l]++;if (r < n) visited[j][r]++;}dfs(n, m + 1);//撤销不可访问位for (int j = m, l = i, r = i; j < n; j++, l--, r++) {visited[j][i]--;if (l >= 0) visited[j][l]--;if (r < n) visited[j][r]--;}//移除字符串list.remove(list.size() - 1);}}
