八皇后問題(回溯)

2021-08-10 08:15:09 字數 1118 閱讀 5512

努比亞和素檀沒有子女,所以他要從一些有整合資格的繼承者中挑選乙個出來繼承王位。他希望這個繼承者足夠聰明,所以他準備了乙個西洋棋盤,上面的每個格仔中均有乙個 1-991−

99的數字。他又準備了 8

8 個皇后棋子。88

皇后的規則就是不能有任何棋子同行或者同列或者同斜線,在滿足這個規則的同時,王位繼承者還需要讓 8

8 個皇后所在的位置的數字的和是最大的。

輸入乙個數字 k(k\leq 20)k(

k≤20

),代表棋盤的數量。

接下來有 k

k 個棋盤,每個棋盤有 6464

個數字,分成 8

8 行 8

8 列出入,具體可見樣例,每乙個數字均小於 10010

0。每乙個棋盤對應輸出最大的數值, 一共輸出 kk行。

樣例輸入

1

1 2 3 4 5 6 7 8

9 10 11 12 13 14 15 16

17 18 19 20 21 22 23 24

25 26 27 28 29 30 31 32

33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48

48 50 51 52 53 54 55 56

57 58 59 60 61 62 63 64

樣例輸出

260

#include

#include

using namespace std;

int maxsum=-1;

int board[8][8],c[8];//c[i]=j;表示i行選第j個數 

bool valid(int a,int b)//判斷是否合法 

void search(int cur)

else }}

int main()

{int n;

cin>>n;

while(n--)

{for (int i=0;i<8;i++)

for (int j=0;j<8;j++)

cin>>board[i][j];

maxsum=-1; 

search(0);

cout<

回溯 八皇后問題

八皇后問題 國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。分析 八皇后問題是回溯演算法的典型案例。我想我們在自己做的過程中,是這樣的 是先從 0,0 這個座標開始排放皇后,然後 1...

八皇后問題 回溯

在劉汝佳老師的書中對於8皇后問題的分析 我感覺非常經典 8皇后問題可行的解 92個 一共有3種思考的出發點 從64個格仔中選乙個子集,使得 子集中恰好有8個格仔,且任意兩個選出的格仔都不在同一行,同一列或同一對角線上 這正是子集的列舉問題。然而,64個格仔的子集有264個,太大了,這並不是乙個很好的...

八皇后問題(回溯)

八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。可設定乙個陣列a i j,代表第i行第j列放置棋子。先按行從上往下的順序,每遞迴一次,在每一行的某一列放乙個棋...