八皇后問題 遞迴

2022-09-15 19:39:18 字數 1061 閱讀 3118

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例.在8x8格的西洋棋上擺放8個皇后,使其不能互相攻擊,即:任意兩個皇后都不能處於同一行,同一列或同一斜線上,問有多少中擺法(92)

第乙個皇后先放第一行第一列

第二個皇后放在第二行第一列,然後判斷是否ok,如果不ok,繼續放在第二列,第三列,依次把所有列都放完,找到乙個合適的

繼續放第3個皇后,還是第一列,第二列.......知道第8個皇后也能放在乙個不衝突的位置,算是找到了乙個正確的解

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

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

示意圖:

說明

public class queue8 

int arr = new int[max];

static int count = 0;

public static void main(string args)

/*** 放置第n+1個皇后

** @param n 皇后的下標

*/public void check(int n)

for (int i = 0; i < max; i++) }}

/*** @param n 皇后的下標

* @return 不衝突返回true

*/private boolean judge(int n)

}return true;

}//列印放置的結果

private void print()

system.out.println();}}

八皇后問題 遞迴

問題描述 在乙個8 8西洋棋盤上,有8個皇后,每個皇后佔一格 要求皇后間不會出現相互 攻擊 的現象,即不能有兩個皇后處在同一行 同一列或同一對角線上。問共有多少種不同的方法。程式 public void testeightprince 初始化,所有的位置都可以放置乙個皇后 for int x 0 x...

八皇后問題 遞迴

八皇后問題 遞迴 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。8 8的棋盤方格 每一行的某一列上要有乙個皇后 public class eightqueen 左上方 for int i 1 r...

八皇后問題(遞迴版)

author phinecos since 2008 10 31 class eightqueen 第col列不能有多於1個皇后 for i 0 i maxsize i 對角線不能有多於1個皇后 反對角線 for i row 1 j col 1 i 0 j maxsize i,j for i row...