八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。
1.第乙個皇后先放一行一列
2.第二個皇后放在第二行第一列,然後判斷是否ok,如果不ok,繼續放在第二列第三列依次都放完,找到乙個合適的
3.繼續第三個皇后,還是第一列、第二列..直到第八個皇后也能放在乙個不衝突的位置,算乙個正確解
4.當找到正確解,在棧退回到上乙個棧的時,就會開始回溯,即將第乙個皇后,放到第一列的所有正確解,全部得到
5.然後回頭繼續第乙個皇后放第二列,後面繼續執行1⃣️2⃣️3⃣️步驟
說明:理論上應該建立乙個二維陣列來表示棋盤,但實際可以通過演算法,用乙個一維陣列即可解決問題
arr[8] =
//每個位置代表哪一行,具體數字表示列
南故笙煙:八皇后問題分析和實現(下)zhuanlan.zhihu.com
八皇后時間複雜度 回溯 N皇后問題
在n n格的棋盤上放置彼此不受攻擊的n個皇后。由於皇后可以攻擊與之處於同一行或同一列或在同一斜線上的棋子。n皇后問題等價於在n n的棋盤上放置n個皇后,任何兩個皇后不放在同一列或同一行或同一斜線上。解法分析 最粗暴的做法是每一行遍歷列,然後每次和前面的所有元素判斷一下是不是互相攻擊。複雜度太高。df...
八皇后時間複雜度 九章演算法 N皇后問題
n皇后問題是將n個皇后放置在n n的棋盤上,皇后彼此之間不能相互攻擊 任意兩個皇后不能位於同一行,同一列,同一斜線 給定乙個整數n,返回所有不同的n皇后問題的解決方案。每個解決方案包含乙個明確的n皇后放置布局,其中 q 和 分別表示乙個女王和乙個空位置。樣例1 輸入 1 輸出 q 樣例2 輸入 4 ...
回溯 八皇后問題
八皇后問題 國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。分析 八皇后問題是回溯演算法的典型案例。我想我們在自己做的過程中,是這樣的 是先從 0,0 這個座標開始排放皇后,然後 1...