51.N-Queens

題目連接:https://leetcode.com/problems/n-queens/description/數組

題目大意:N皇后問題,返回全部解序列,存入list中返回。ide

法一:深搜回溯,這裏最關鍵的是if條件判斷皇后放置問題,代碼以下(只有9個測試用例,耗時10ms):測試

 1     public List<List<String>> solveNQueens(int n) {
 2         int[] res = new int[n];//res的下標表示皇后放置在第幾行,res的值表示皇后放置在第幾列
 3         List<List<String>> list = new LinkedList<List<String>>();//list存儲最終返回的全部解
 4         int[][] vis = new int[3][n + n];//vis標記哪一列,哪條主對角線,哪條副對角線已經放置值
 5         for(int i = 0; i < 3; i++) {//初始化標記數組
 6             for(int j = 0; j < n; j++) {
 7                 vis[i][j] = 0;
 8             }
 9         }
10         dfs(res, 0, n, list, vis);
11         
12         return list;
13     }
14     
15     public static void dfs(int[] res, int row, int n, List<List<String>> list, int[][] vis) {
16         if(row == n) {//若是已經放置完全部的列,則將當前解加入到list中
17             List<String> listIn = new LinkedList<String>();//先將內置的List賦值
18             for(int i = 0; i < res.length; i++) {
19                 String s = "";
20                 for(int j = 0; j < n; j++) {
21                     if(j == res[i]) {
22                         s += "Q";
23                     }
24                     else {
25                         s += ".";
26                     }
27                 }
28                 listIn.add(s);
29             }
30             list.add(listIn);//再將內置的list的值加入到要返回的list中
31             return;
32         }
33         for(int col = 0; col < n; col++) {//對於每一行要放置的皇后,col表示當前行能夠放置的列
34             if(vis[0][col] == 0 && vis[1][col + row] == 0 && vis[2][row - col + n] == 0) {//關鍵判斷:不一樣行,不一樣列,不一樣主對角線,不一樣副對角線
35                 vis[0][col] = 1;//
36                 vis[1][col + row] = 1;//副對角線
37                 vis[2][row - col + n] = 1;//主對角線
38                 res[row] = col;//存儲皇后應該放置的位置
39                 dfs(res, row + 1, n, list, vis);//遞歸
40                 vis[0][col] = 0;
41                 vis[1][col + row] = 0;
42                 vis[2][row - col + n] = 0;
43             }
44         }
45     }
View Code

法二(借鑑):非遞歸高效解法:http://blog.csdn.net/hackbuteer1/article/details/6657109spa

相關文章
相關標籤/搜索