八皇后問題演算法解析

2021-09-12 02:51:11 字數 1291 閱讀 6339

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。

該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,

即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。

高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。

計算機發明後,有多種計算機語言可以解決此問題。

如下用c++**實現:

演算法說明:

結構:用乙個一維陣列表示8皇后排放的位置。(如下圖)

演算法說明:

現嘗試再第一列的任意位數放皇后,然後在嘗試在第二列的任意位置放皇后,依次迭代。

迭代到第8行,如果有成功的就將擺法數加1。

一維陣列的複製組合全部實驗過後,程式結束。

回溯點:

1.gcount++, print();

geightqueen[index] = 0;

2.eight_queen(index + 1);

geightqueen[index] = 0;

上面的說明希望有利於您的理解,哦,在加一句總結。

回溯法的關鍵就是設計乙個可回溯的資料結構,這是關鍵,就像該問題的一維陣列(geightqueen[8] )一樣。

#include

using

namespace std;

static

int geightqueen[8]

=, gcount =0;

void

print()

//輸出每一種情況下棋盤中皇后的擺放情況

cout <<

"*************************=\n";}

intcheck_pos_valid

(int loop,

int value)

//檢查是否存在有多個皇后在同一行/列/對角線的情況

return1;

}void

eight_queen

(int index)

eight_queen

(index +1)

; geightqueen[index]=0

;}}}

intmain

(int argc,

char

*ar**)

演算法 八皇后問題

問題簡述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在8 8的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n1 n1,而皇后個數也變成n2。而且僅當...

演算法 八皇后問題

問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在8 8的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當n 1...

演算法 八皇后問題

created by xiaoyu on 2019 10 6.include include using namespace std const int n 8 int board n n int tot 0 int valid int x,int y for int i 0 i x i retur...