您的位置:首页 > 编程语言 > Java开发

java实现回溯法解n皇后问题

2013-06-01 15:47 387 查看
package com.wzs;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

      Queue queue = new Queue(8);

      queue.backtrack(0);

      queue.totalSolve();
}

}

class Queue{
int n;
int s[];
int sum;//记录方案数
Queue(int m){
n=m;
s=new int
;
sum=0;
}
//从第0行开始依次向下搜索合适的位置
void backtrack(int t){
if(t>=n){
sum++;
for(int i=0;i<n;i++)
System.out.print(s[i]+" ");
System.out.println();
}
else{
for(int i=0;i<n;i++){
if(islegal(t,i)){
s[t]=i;
backtrack(t+1);
}
}
}
}
//假设第t行的位置为i
private boolean islegal(int t, int i) {
for(int k=0;k<t;k++)
if(i==s[k]||Math.abs(t-k)==Math.abs(s[k]-i))
return false;

return true;
}
public void totalSolve(){
System.out.println("总的方案数:"+sum);
}

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