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

N-Queens

2014-01-17 13:47 288 查看
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.."]
]

Analysis: DFS. The index of the existQueens array is the row#, and the value of each element is the column where the queen is placed. 

public class Solution {
public void solveNQueens(int row, ArrayList<String[]> res, String[] tem, int[] existQueens) {
if(row == existQueens.length) {
String[] clone = Arrays.copyOf(tem, tem.length);
res.add(clone);
return;
}

for(int col=0; col<existQueens.length; col++) {
boolean satisfied = true;
for(int i=0; i<=row; i++) {
if(existQueens[i]==col || Math.abs(i-row)==Math.abs(existQueens[i]-col)) {
satisfied = false;
break;
}
}
if(satisfied) {
existQueens[row] = col;
for(int m=0; m<col; m++) {
tem[row] += ".";
}
tem[row] += "Q";
for(int q=col+1; q<existQueens.length; q++) {
tem[row] += ".";
}

solveNQueens(row+1, res, tem, existQueens);

existQueens[row] = Integer.MIN_VALUE;
tem[row] = "";
}
}
return;
}

public ArrayList<String[]> solveNQueens(int n) {
ArrayList<String[]> res = new ArrayList<String[]>();
int[] existQueens = new int
;
String[] tem = new String
;
Arrays.fill(tem, "");
Arrays.fill(existQueens, Integer.MIN_VALUE);
solveNQueens(0, res, tem, existQueens);
return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: