public class Test {
public static void main(String[] args) {
Empress a=new Empress();
a.find(0,0);
System.out.println(a.map);
}
}
class Empress{
public int[][] arry=new int[8][8];
public int map=0;
public boolean rule(int arry[][],int k,int j){ //判斷節點是否合適
for(int i=0;i<8;i++){ //行列沖突
if(arry[k][i]==1)
return false;
else if(arry[i][j]==1)
return false;
}
for(int i=k-1,m=j-1;i>=0&&m>=0;i--,m--){ //左對角線
if(arry[i][m]==1)
return false;
}
for(int i=k-1,m=j+1;i>=0&&m<=7;i--,m++){ //右對角線
if(arry[i][m]==1)
return false;
}
return true;
}
public void find(int i,int m){ //尋找皇後節點
if(i>7){ //皇後解
map++;
}else{
for(int j=i+1;j<8;j++){ //刷新當前結點下的數組
for(int k=0;k<8;k++){
arry[j][k]=0;
}
}
for(;i<8;i++){ //深度優先搜索
for(;m<8;m++){
if(rule(arry,i,m)){
arry[i][m]=1;
find(i+1,0);
}
}
}
}
}
}
你的代碼直接把我的Eclipse給卡頓了,停止按鈕都沒有效果了。
參考個正確版本的吧,絕對秒出結果,只需修正打印語句末尾改為"\n"打印換行即可。
http://blog.csdn.net/zhong317/article/details/4586131