九度 1140 回溯 八皇后

2021-07-04 20:24:03 字數 545 閱讀 8673

會下西洋棋的人都很清楚:皇后可以在橫、豎、斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上(有8 * 8個方格),使它們誰也不能被吃掉!這就是著名的八皇后問題。 

乙個皇后q(x,y)能被滿足以下條件的皇后q(row,col)吃掉

x=row(在縱向不能有兩個皇后)

y=col(橫向)

col + row = y+x;(斜向正方向)

col - row = y-x;(斜向反方向)

八皇后問題在資料結構書上都有過說明,我們使用回溯的思想。因為每一行只能放乙個皇后,所以我們遞迴每一行,然後迴圈皇后放在每一列的情況,如果滿足上面八皇后的條件,則在這一處放皇后,遞迴下一行,知道放到了最後一行。

因為本題是說選擇第幾個情況,所以我們事先把92種情況都記錄下來,這樣能節省不少時間。

#include#includeint data[100][8]=;

int tmp[8]=;

int count;

int valid(int x,int y){

int j;

for(int i=0;i

006回溯法 n皇后問題

在n n格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於在n n格的棋盤上放置n個皇后,任何2個皇后不放在同一行或同一列或同一斜線上。如下 nqueen by xcz on 2013.9.10 include include...

N皇后問題 12 回溯法 簡單

回溯法,主要應用在dfs中,主要思想是當你push乙個元素後,記住要pop回去,大致的模板是 path.push back nums i dfs pos 1 path.pop 詳細的模板在我們之前用回溯法解決全排列問題有提到。n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后...

hdu1116回溯N皇后問題

題目連線 經過思考,不難發現 恰好n個皇后放在不同行不同列,那麼是不是可以轉換成n個皇后所在行分別確定 一人一行 的情況下對她們的所在列的列舉。也就是列的全排列生成問題,我們用c x 表示x行皇后的列編號。而我們知道0 n 1的排列一共有n的階乘,列舉量不會超過它。if cur n 遞迴邊界。只要走...