//問題描述:在乙個8×8西洋棋盤上,有8個皇后,每個皇后佔一格;
//要求皇后間不會出現相互攻擊的現象,即不能有兩個皇后處在同一行、同一列或同一對角線上
//問共有多少種不同的擺放方法?
// 本解法採用回溯遞迴法,容易理解,
// 首先在棋盤上擺第乙個皇后,然後擺第二個,每擺乙個皇后則判斷位置是否合法。
// 如果合法,則擺下乙個皇后,如果不合法則在本行下乙個位置嘗試,所有位置嘗試失敗
// 則拿掉這個皇后,重新擺放上乙個皇后的位置.
// 也就是說如果第n個皇后擺放失敗 一直向上回溯 重新擺放第n-1皇后位置.
// 全域性變數chess_board代表棋盤,每一行放乙個皇后.
// 顯然chess_board[4]==5 則說明第4個皇后放在第4行第5個位置
// 同理chess_board[1]==3 則說明第1個皇后放在第1行第3個位置
// 全域性變數counter做計數器
#include
#define max 8
int chess_board[max+1];
int counter;
bool trial(int n)
//如果是最後乙個棋子,並且擺放合法,則列印結果.
if(n==max)
回溯法 求解皇后問題
include include using namespace std static char queen 8 8 建立乙個棋盤 static int a 8 static int b 15 static int c 15 static int iqueennum 0 記錄總的棋盤狀態數 voidq...
8皇后問題 回溯法
為了簡化,先對4皇后問題進行討論,對與4皇后問題,先定義乙個4x4的棋盤 矩陣 按照下面規則將4個棋子 皇后 放到棋盤上。規定 1 任何兩個棋子不同行 2 任何兩個棋子不同列 3 任何兩個棋子不在用一對角線上 先引入一副圖來說明 該圖為嚴版教材上的 對與此問題,剛開始的時候棋盤為空,回溯法的思想是 ...
回溯法求解N皇后問題。
n皇后問題就是 不存在兩個皇后同行或同列,或在同一斜線上。如下圖所示。黑色塊表示其中乙個皇后放在了第二行,第三列。這時,只有綠色圈圈才能放其他的皇后。回溯法的基本思想 確定了解空間的組織結構後,回溯法就從開始結點 根結點 出發,以深度優先的方式搜尋整個解空間。這個開始結點就成為乙個活結點,同時也成為...