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

N-Queens

2015-06-10 10:00 495 查看
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 List<String[]> list;
public List<String[]> solveNQueens(int n) {
int [] queenList = new int
;
list = new ArrayList<String[]>();
placeQueen(0,queenList);
return list;

}
boolean isSafe(int col,int row,int[] queenList){
int tmpRow = 0;
for(int tmpCol = 0; tmpCol < col; tmpCol++){
tmpRow = queenList[tmpCol];
if(tmpRow == row|| tmpRow+tmpCol == row+col||tmpRow-tmpCol==row-col){
return false;
}
}
return true;
}
boolean placeQueen(int col,int[] queenList){
boolean isFind = false;
int n = queenList.length;
if(col == n){
// isFind = true; //不设结束条件,继续回溯
String[] s = convert(queenList);
list.add(s);

}
else{
int row = 0;
while(row < n&&!isFind){
if(isSafe(col,row,queenList)){
queenList[col] = row;
isFind = placeQueen(col+1,queenList);
// if(!isFind){
//     row++;
// }
row++;
}
else{
row++;
}
}
}
return isFind;
}
String [] convert(int [] queenList){
int n = queenList.length;
String [] str = new String
;
char [] ch = new char
;
Arrays.fill(ch,'.');
int k = 0;
for(int i = 0; i <n;i++){
k = queenList[i];
ch[k] ='Q';
str[i] = new String(ch);
ch[k] ='.';
}
return str;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode N-Queens