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

来源:互联网 发布:苏宁售后知乎 编辑:程序博客网 时间:2024/06/06 10:50
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[n];
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);
}
}
原创粉丝点击