八皇后 遞迴演算法

2021-10-08 12:37:18 字數 1207 閱讀 6187

在8×8格的西洋棋上擺放8個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。如果經過±90度、±180度旋轉,和對角線對稱變換的擺法看成一類,共有42類。

由於二維陣列每行只放乙個陣列,我們可以用乙個一維的陣列來表示建立乙個長度為8的陣列,陣列的值表示棋子放在第幾列。下標0表示第一行,以此類推。例如 04752613 可以表示以下的二維陣列。即可表示乙個八皇后的解。

100

0000

0000

0100

0000

0000

1000

0010

0001

0000

0000

0001

0010

0000

0000

1000

0

建立乙個judge方法,判斷當前棋子是否與前面所擺放的棋子衝突,如果衝突返回false 反之為true。

建立乙個check方法遍歷陣列當前行的每一列。呼叫judge方法判斷。如果judge判斷為true,繼續遞迴呼叫check。反之退到上一層。

當check到 8 時。說明已經得到乙個答案。列印出即可。

package com.zzd.recursive;

/** * @author zzd

* @date 2020/7/25 15:47

* @email [email protected]

*/public

class

queen8

//有8行所以迴圈八次。

for(

int i =

0; i < max; i++)}

}/**

* @params

* @return

* * 判斷第n個皇后所放的位置與前面是否有重複的

*/private

boolean

judge

(int n)

}return

true;}

//列印結果

private

void

print()

system.out.

println()

;}}

八皇后遞迴演算法

include 規則 在8x8的棋盤內放置八個皇后,並且保證每個皇后是安全的。分析 每個皇后必須單獨一行,用乙個陣列來表示她們所在列的位置,下標代表所在行的位置。int aqueen 8 儲存結果 bool analyzepoint int x,int y 規則檢測,檢測當前位置是否和已有位置衝突 ...

遞迴演算法之八皇后

八皇后問題核心 1 同一行或者同一列不能放置皇后 2 斜率為1 1的對角線上不能有兩個皇后。如圖 實現原理 include include using std cout using std endl int count 0 int detection int board 8 int line,int...

八皇后 遞迴

include iostream using namespace std int number 0 int isleague int row,int j,int chess 8 判斷左上方是否合法 for i row,k j i 0 k 0 i k 判斷右下方是否合法 for i row,k j i...