回溯法求解8皇后問題

2021-06-16 02:43:08 字數 652 閱讀 2058

//問題描述:在乙個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皇后問題就是 不存在兩個皇后同行或同列,或在同一斜線上。如下圖所示。黑色塊表示其中乙個皇后放在了第二行,第三列。這時,只有綠色圈圈才能放其他的皇后。回溯法的基本思想 確定了解空間的組織結構後,回溯法就從開始結點 根結點 出發,以深度優先的方式搜尋整個解空間。這個開始結點就成為乙個活結點,同時也成為...