八皇后問題

2022-06-30 11:03:09 字數 865 閱讀 9063

1.8乘8的棋盤上

2.擺放8個皇后

3.任意兩個皇后不能同行、同列、同對角線

4.問多少種擺放方法

1.第乙個皇后放在第一列

2.第二個皇后放在第二列,判斷是否相互攻擊,如果攻擊依次放在第二列、第三列、依次把所有列都放完,找到乙個合適的

3.繼續第三個皇后,還有第一列、第二列、...直到放完了八個皇后,找到乙個正確的解

4.當得到乙個正確的解時,在棧回退到上乙個棧時,就開始回溯,即將第乙個皇后,放在第一列的時候的所有正確解,全部得到

5.然後回頭繼續第乙個皇后放到第二列,後面迴圈執行1,2,3的步驟

package recursion;

public class queen

int array=new int[max];

static int count=0;

//回溯的原因,進入check中都有for(int i=0;ipublic static void main(string args)

//編寫乙個方法,放置n個皇后

//check是每一次進入到check中都有乙個for迴圈

private void check(int n)

//依次放入皇后,並判斷是否衝突

for(int i=0;i} }

//檢視當我們放置第n個皇后,就去檢查該皇后是否和已經擺放的皇后衝突

private boolean judge(int n)

} return true; }

//將皇后擺放的位置列印出來

private void print()

system.out.println();

}}

八皇后問題

八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...

八皇后問題

include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...

八皇后問題

package quess 由於八個皇后的任意兩個不能處在同一行,那麼這肯定是每乙個皇后佔據一行。於是我們可以定義乙個陣列columnindex 8 陣列中第i個數字表示位於第i行的皇后的列號。先把columnindex的八個數字分別用0 7初始化,接下來我們要做的事情就是對陣列columninde...