八皇后問題 經典回溯演算法

2022-03-20 04:57:47 字數 1250 閱讀 3419

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。

以下實現是極客時間王爭的解法,非常巧妙,思路也非常清晰,如果理解了八皇后問題的本質後建議採用該方法,**實現如下:

#include int queenplace[8] = ;  //

全域性變數,下標表示行,值表示queen儲存在那一列

int count = 0; //

計數器void printqueen()

else

}printf("\n

");} printf(

"----count:%d-----\n

", ++count);

}bool isok(int row, int col)

if (rightup < 8

) --leftup; ++rightup;

} return

true;}

void eightqueen(int

row)

for (int col = 0; col < 8; ++col)

}}intmain()

leetcode 51

class

solution

void backtrack(int

row)

for (int i = 0; i < n_queen.size(); ++i)

}bool isok(int row, int

col)

}return

true

; }

void

storeresult()

res.push_back(result);

}};

解法2:

class

solution

return

res;

}void traceback(int n, int row, vector&q)

for (int i = 0; i < n; ++i)}}

vector

string>> solvenqueens(int

n) };

經典回溯演算法 八皇后問題

八皇后問題是由19世紀數學家 搞死先生 高斯先生 提出的,具體的問題是這樣的 在西洋棋的棋盤中 有8 8格 擺放 8個皇后,這八個皇后不能相互攻擊到 皇后的攻擊方向很廣 橫著,豎著,斜著都能攻擊 即 8個皇后不能處於同行 同列 同一正反對角線上,這樣就不能相互攻擊到了。那麼,這樣的皇后佔位的方法,一...

經典回溯演算法(八皇后問題)

今天偶爾看到了乙個演算法問題 八皇后問題 回想一下還是在演算法課上學習過的,於是,自己總結了一下,寫了這篇日誌 演算法提出 在西洋棋棋盤上 8 8 放置八個皇后,使得任意兩個皇后之間不能在同一行,同一列,也不能位於同於對角線上。問共有多少種不同的方法,並且指出各種不同的放法。演算法思路 首先我們分析...

八皇后問題(經典演算法 回溯法)

問題描述 八皇后問題 eight queens problem 是十九世紀著名的數學家高斯於1850年提出的。問題是 在8 8的棋盤上擺放八個皇后,使其不能互相攻擊。即任意兩個皇后都不能處於同一行 同一列或同一斜線上。可以把八皇后問題擴充套件到n皇后問題,即在n n的棋盤上擺放n個皇后,使任意兩個皇...