您的位置:首页 > 其它

递归求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);

}

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