您的位置:首页 > 产品设计 > UI/UE

[LeetCode] N-Queens

2014-05-04 17:54 239 查看
Total Accepted: 7379 Total
Submissions: 29099

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.



Given an integer n, return all distinct solutions to the n-queens puzzle.

Each solution contains a distinct board configuration of the n-queens' placement, where 
'Q'
 and 
'.'
 both
indicate a queen and an empty space respectively.

For example,

There exist two distinct solutions to the 4-queens puzzle:
[
[".Q..",  // Solution 1
"...Q",
"Q...",
"..Q."],

["..Q.",  // Solution 2
"Q...",
"...Q",
".Q.."]
]
public class Solution {
public ArrayList<String[]> solveNQueens(int n) {
ArrayList<String[]> list = new ArrayList<String[]>();
int[]               path = new int
;

dfs(list, path, n, 0);

return list;
}

public void dfs(ArrayList<String[]> list, int[] path, int n, int level) {
if (level == n) {
String[] set = new String
;

for (int i = 0; i < n; i++) {
StringBuffer str = new StringBuffer();
for (int j = 0; j < n; j++) {
if (path[i] == j)   str.append("Q");
else                str.append(".");
}
set[i] = str.toString();
}

list.add(set);
return;
}

for (int i = 0; i < n; i++) {
path[level] = i;
if (check(path, level)) dfs(list, path, n, level + 1);
}
}

public boolean check(int[] path, int level) {
for (int i = 0; i < level; i++) {
if ((path[i] == path[level]) || Math.abs(path[i] - path[level]) == (level - i)) return false;
}

return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode Recursion DFS