程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 遞歸-(已解決)自己用java寫的八皇後問題算法,可是不行,求告知原因

遞歸-(已解決)自己用java寫的八皇後問題算法,可是不行,求告知原因

編輯:編程解疑
(已解決)自己用java寫的八皇後問題算法,可是不行,求告知原因

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

H_JinXian
wojiushiwo945you
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved