N皇后 附回溯模板

2021-10-08 08:10:41 字數 840 閱讀 2143

n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。即使其中任意兩個皇后都不同列、同行和在一條斜線上。

本題用回溯法解決,基本思想為採用深度優先遍歷策略,遍歷過程中對於每個節點做一次判斷,如果滿足約束條件則繼續向下,否則回溯到前置節點。達到最大深度時則可得到其中一種問題的解。

回溯模板

vector<

bool

>

judge

(n);

//記錄列表

void

backtrack

(int x)

for(

int i = begin, i != end;

++i)

//begin為上界,end為下界

}}

例題:n皇后

思路:注意到 對於棋盤上的每乙個位置

行 + 列 = 常數

行 - 列 = 常數

所以每乙個位置所在的列,主對角線,副對角線都是唯一的,可以按行迴圈,col,mains,sub作為記錄。

解題**:

class

solution

for(

int c =

0; c < n;

++c)

}return;}

vector>

solvenqueens

(int n)

};

n皇后(回溯)

題目描述 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。輸入測試資料由多組測試樣例組成。每組測試資料第一行輸入乙個正整數 n 1 n 10 輸出輸出有多少種合...

回溯 n皇后問題

思想 用回溯方法求解,首先要分析問題的求解空間。可用一棵n叉樹表示這個問題的求解空間,在回溯遍歷這個課二叉樹的過程中形成合理的解。對於這棵n叉樹,列序號i 0 n 1 是它的孩子,而每個孩子都有深度為n的子樹 包括自身 這些子樹的層次是n個皇后 也代表每個皇后的行序號,因為不同的皇后肯定不在同一行 ...

n皇后問題(回溯)

problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...