八皇后問題(經典演算法 回溯法)

2022-08-31 09:27:11 字數 715 閱讀 1395

問題描述:

八皇后問題(eight queens problem)是十九世紀著名的數學家高斯於2023年提出的。問題是:在8×8的棋盤上擺放八個皇后,使其不能互相攻擊。即任意兩個皇后都不能處於同一行、同一列或同一斜線上。

可以把八皇后問題擴充套件到n皇后問題,即在n×n的棋盤上擺放n個皇后,使任意兩個皇后都不能互相攻擊。

思路:使用回溯法依次假設皇后的位置,當第乙個皇后確定後,尋找下一行的皇后位置,當滿足左上、右上和正上方向無皇后,即矩陣中對應位置都為0,則可以確定皇后位置,依次判斷下一行的皇后位置。當到達第8行時,說明八個皇后安置完畢。

**如下:

#includeusing namespace std;

#define n 8

int a[n][n];

int count=0;

//判斷是否可放

bool search(int r,int c)

} //右上

for(i=r,j=c; i>=0 && jreturn true;

}//輸出

void print()

cout

void queen(int r)

int i;

for(i=0; i}//入口

int main()

八皇后問題(經典演算法 回溯法)

問題描述 八皇后問題 eight queens problem 是十九世紀著名的數學家高斯於1850年提出的。問題是 在8 8的棋盤上擺放八個皇后,使其不能互相攻擊。即任意兩個皇后都不能處於同一行 同一列或同一斜線上。可以把八皇后問題擴充套件到n皇后問題,即在n n的棋盤上擺放n個皇后,使任意兩個皇...

經典回溯演算法 八皇后問題

八皇后問題是由19世紀數學家 搞死先生 高斯先生 提出的,具體的問題是這樣的 在西洋棋的棋盤中 有8 8格 擺放 8個皇后,這八個皇后不能相互攻擊到 皇后的攻擊方向很廣 橫著,豎著,斜著都能攻擊 即 8個皇后不能處於同行 同列 同一正反對角線上,這樣就不能相互攻擊到了。那麼,這樣的皇后佔位的方法,一...

經典回溯演算法(八皇后問題)

今天偶爾看到了乙個演算法問題 八皇后問題 回想一下還是在演算法課上學習過的,於是,自己總結了一下,寫了這篇日誌 演算法提出 在西洋棋棋盤上 8 8 放置八個皇后,使得任意兩個皇后之間不能在同一行,同一列,也不能位於同於對角線上。問共有多少種不同的方法,並且指出各種不同的放法。演算法思路 首先我們分析...