递归求N皇后
2011-02-22 12:16
99 查看
递归求N皇后(java)
package dane.queen.com;
/*
* @author dane-zhu
* 递归求N皇后,2011.2.22
*/
public class Queen {
private final static int N = 8;
private static char[][] matrix = new char
;
private static int x;
private static int sum;
public Queen() {
for(int i = 0 ;i < N;i++){
for(int j = 0; j < N;j++){
matrix[i][j] = '*';
}
}
x = 0;
sum = 0;
}
private Boolean check(char[][] m,int x,int y){
for(int i = 0 ;i < N;i++){
for(int j = 0; j < N;j++){
//判断上下左右有没有'Q'
if(m[i][y] == 'Q' || m[x][j] == 'Q')
return false;
//判断上斜线上有没有'Q'
if((i != x && j != y) && ((i - x)/(j - y * 1.0) == 1.0 ||(i - x)/(j - y * 1.0) == -1.0)){
if(m[i][j] == 'Q')
return false;
}
}
}
return true;
}
private void find(char[][] m,int x){
if(x == N){
sum++;
print(m);
return;
}
for(int i = 0;i < N;i++){
if(check(m, x, i) == true){
m[x++][i] = 'Q';
//递归查找
find(m, x);
m[--x][i] = '*';
}
}
return;
}
private void print(char[][] m){
System.out.println("Solve of " + sum);
for(int i = 0 ;i < N;i++){
for(int j = 0; j < N;j++){
System.out.print(m[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args){
Queen queen = new Queen();
queen.find(matrix, x);
}
}
package dane.queen.com;
/*
* @author dane-zhu
* 递归求N皇后,2011.2.22
*/
public class Queen {
private final static int N = 8;
private static char[][] matrix = new char
;
private static int x;
private static int sum;
public Queen() {
for(int i = 0 ;i < N;i++){
for(int j = 0; j < N;j++){
matrix[i][j] = '*';
}
}
x = 0;
sum = 0;
}
private Boolean check(char[][] m,int x,int y){
for(int i = 0 ;i < N;i++){
for(int j = 0; j < N;j++){
//判断上下左右有没有'Q'
if(m[i][y] == 'Q' || m[x][j] == 'Q')
return false;
//判断上斜线上有没有'Q'
if((i != x && j != y) && ((i - x)/(j - y * 1.0) == 1.0 ||(i - x)/(j - y * 1.0) == -1.0)){
if(m[i][j] == 'Q')
return false;
}
}
}
return true;
}
private void find(char[][] m,int x){
if(x == N){
sum++;
print(m);
return;
}
for(int i = 0;i < N;i++){
if(check(m, x, i) == true){
m[x++][i] = 'Q';
//递归查找
find(m, x);
m[--x][i] = '*';
}
}
return;
}
private void print(char[][] m){
System.out.println("Solve of " + sum);
for(int i = 0 ;i < N;i++){
for(int j = 0; j < N;j++){
System.out.print(m[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args){
Queen queen = new Queen();
queen.find(matrix, x);
}
}
相关文章推荐
- N皇后问题递归与非递归解法
- N皇后问题【递归求解】
- 8皇后(按列递归)
- N皇后问题递归回溯
- 回溯法解决N皇后问题——递归与非递归求解
- 八皇后问题 递归求解法
- 递归求解N皇后问题(c语言)
- 八皇后问题(递归版)
- hdoj-2553 n 皇后问题【递归】
- N皇后问题(递归+回溯)的C++实现
- 【蓝桥杯-递归回溯】八皇后问题+N皇后问题
- 算法-N皇后(递归)
- C语言-数据结构-递归求解实例-8皇后问题
- 皇后问题-经典递归
- n皇后 回溯递归
- 递归与动态规划---N皇后问题的递归方法和位运算方法
- 皇后问题之C#版(非递归)
- N皇后递归剪枝实现
- N皇后问题(递归做法)
- 用递归的方法和非递归方法解决8皇后问题