用列舉法解8皇后問題:在西洋棋棋盤上放8個皇后,西洋棋棋盤共有8行8列,皇后可以吃掉與之同行同列以及同一對角線上的其他皇后。為了讓她們共存,請編寫演算法找出各種放置方法。
題目要求用列舉法解決該問題,但是若完全用迴圈實現起來過於繁瑣,所以這裡使用遞迴呼叫求解,用for迴圈的思路與之相同。可以用一維陣列來實現對皇后位置的模擬。陣列的下標表示該皇后所在的行,值為其所在的列。每個皇后分別在不同的行進行放置,這樣同時每個元素的下標又可以區別每個皇后。然後用乙個函式實現遞推,另乙個函式實現判斷當前放置是否合法即可解決該問題。以下**可以輸出各種可行的擺放結果,並輸出最終方案個數。
#include
#include
using namespace std;
int j =0;
bool judge
(int queen[
], int r
)//判斷這一行的皇后放置位置是否合法。
}return
true;}
void
try(int queen[
], int r
)//列舉嘗試函式。
cout << endl;
return;}
try(queen,r+
1);}
}}int main()
結果如下(此處只給出結果的一部分,其餘請自行嘗試):
列舉法 八皇后
c程式設計競賽教程 例8.7 8皇后問題 問題描述 八皇后問題,是乙個古老而著名的問題,是回溯演算法 的典型例題。該問題是十九世紀著名的數學家高斯 1850年提出 在8x8格的西洋棋 上擺放八個皇后 使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。問題分析 這個...
回溯法解決八皇后問題
在西洋棋棋盤上 8 8 放置八個皇后,使得任意兩個皇后之間不能在同一行,同一列,也不能位於同於對角線上。問共有多少種不同的方法,並且指出各種不同的放法。使用回溯法依次假設皇后的位置,當第乙個皇后確定後,尋找下一行的皇后位置,當滿足左上 右上和正上方向無皇后,即矩陣中對應位置都為0,則可以確定皇后位置...
c解決八皇后問題
問題描述 這是乙個經典的關於組合學的問題 在乙個西洋棋中的的棋盤上放置8個皇后,為了使其中的任何2個皇后都不能相互 攻擊 希望尋求8個皇后的安全放置位置。該問題的不能相互 攻擊 相當於要求任意兩個皇后不能在同一行 同一列或同一斜線上。求解可能的方案及方案數。思路 一般採用回溯法。易知,每行肯定有乙個...