資源描述:
《八皇后——窮舉法》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、利用窮舉解法來解決八皇后問題。????由于棋盤的對稱性,第一行只考慮前四列的情況,然后逐行查找可行點(diǎn),計算出結(jié)果后,總的解法數(shù)即是計算結(jié)果的兩倍,而后四列的情況也即是前四列結(jié)果關(guān)于垂直線的對稱。源程序如下:1.public?class?EightQueens?{2.????int?answer=0;???????//結(jié)果數(shù)3.????int?chess[][]=new?int[8][8];//棋盤4.????EightQueens()?{5.????????int?i=0,j=0,k=0;6.????????//取半個棋盤計算結(jié)
2、果,最后結(jié)果*27.????????for(k=0;k<4;k++)?{8.????????????//棋盤初始化為09.????????????for(i=0;i<8;i++)?{10.????????????????for(j=0;j<8;j++)11.????????????????????chess[i][j]=0;12.????????????}13.????????????//第一行14.????????????chess[0][k]=1;15.????????????row(1);16.????????}17.??
3、??????System.out.println("八皇后問題共有"+answer+"種解法");18.????}19.????public?void?row(int?I)?{20.????????int?i=0,j=0;21.????????for(j=0;j<8;j++)?{22.????????????//重新初始化行23.????????????for(i=I;i<8;i++)?{24.????????????????if(sum(i)>0)?{25.????????????????????for(int?k=0;k<8
4、;k++)?{26.????????????????????????chess[i][k]=0;27.????????????????????}28.????????????????}29.????????????}1.????????????if(sum1(j)==0&&sum2(I,j)==0)?{2.????????????????chess[I][j]=1;3.????????????????if(I==7)?{4.????????????????????answer+=2;5.????????????????????/
5、/輸出結(jié)果,棋盤以數(shù)組形式表示6.????????????????????/*for(int?a=0;a<8;a++)?{7.????????????????????????for(int?b=0;b<8;b++)?{8.????????????????????????????System.out.println("解法"+answer+":");9.????????????????????????????System.out.print(chess[a][b]+"?");10.????????????????????????}
6、11.????????????????????????System.out.println();12.????????????????????}13.????????????????????System.out.println();14.??????????????????*/15.?????????????????/*for(int?a=0;a<8;a++)?{16.????????????????????for(int?b=0;b<8;b++)?{17.????????????????????????System.out.p
7、rintln("解法"+(answer+1)+":");18.????????????????????????System.out.print(chess[a][7-b]+"?");19.????????????????????}20.????????????????????System.out.println();21.????????????????}22.????????????????System.out.println();23.????????????????*/24.????????????????}25.????
8、????????????else?row(I+1);26.????????????}27.????????}28.????}29.????//計算行值30.????public?int?sum(int?i)?{31.????????int?j=0,s=0;32.