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

N-Queens

2014-08-06 06:50 357 查看
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.."]
]


Have you been asked this question in an interview?

用排列方法

n-queens 问题说它是dp, 因为position i 的位置 是通过 position[0,,,i-1] 来决定的

public class Solution {
public List<String[]> solveNQueens(int n) {
if (n < 0) {
return null;
}
List<String[]> results = new ArrayList<String[]>();
int[] position = new int
;
placeQueens(n, position, 0, results);
return results;
}
private void placeQueens(int n, int[] position, int row, List<String[]> results) {
if (row == n) {
printQueens(n, position, results);
return;
}
for (int i = 0; i < n; i++) {
position[row] = i;
if (isValide(position, row)) {
placeQueens(n, position, row + 1, results);
}
position[row] = 0;
}
}
private boolean isValide(int[] position, int last) {
for (int i = 0; i < last; i++) {
if (position[i] == position[last]) {
return false;
}
if ((last - i) == Math.abs(position[last] - position[i])) {
return false;
}
}
return true;
}
private void printQueens(int n, int[] position, List<String[]> results){
String[] result = new String
;
for (int i = 0; i < n; i++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < n; j++) {
if (j == position[i]) {
sb.append('Q');
} else {
sb.append('.');
}
}
result[i] = sb.toString();
}
results.add(result);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: