八皇后問題 遞迴解決 回溯演算法簡單應用

2021-10-05 18:43:38 字數 1045 閱讀 9464

八皇后問題算是乙個回溯演算法的典型案例。雖然我不太懂回溯,但該問題很有內味(。・∀・)ノ゙,下面描述一下我的解法

八皇后問題指在乙個8×8的棋盤上,擺放八個皇后,要求這八個皇后不能互相攻擊,每個皇后的攻擊範圍為同一行、同一列、同乙個斜線,也就是任意兩個皇后不能處於同一行、同一列、同一斜線上,問題就是這八個皇后有多少種站法。(我懶得用主對角線、副對角線什麼的解釋了,大家都懂( ̄▽ ̄)")

顯然每一行、每一列都有且僅有乙個皇后,8×8的棋盤比作8階矩陣

若兩個元素位於同一主對角線,則他們行數差等於列數差;若兩個元素位於同一副對角線,則他們行數差加列數差為0。ok,數學準備工作完成,具體參考**注釋吧

#include

#include

#include

using

namespace std;

int chess[9]

[9], queen[9]

, sum =0;

//皇后陣列下標為該皇后所站行數,值為所站列數

bool

can_place

(int row,

int column)

}return

true;}

void

place_queen

(int row)

cout << endl;

} cout << endl;

return

;//該句可有可無,提高一丟丟效率吧

}for

(int column =

1; column <=

8; column++)}

return;}

intmain()

以前學習c的時候,毫無演算法概念,用過暴力求解,還真就做出來了,但耗時感人。其實我現在仍然覺得暴力出奇蹟

演算法 遞迴與回溯演算法解決八皇后問題

小結完整 在沒有其他演算法的加持下時,回溯演算法簡單來說,就是不斷試錯的過程。通過不斷向下乙個節點列舉尋找滿足條件的答案,當無法尋找到時,則返回至上乙個節點,然後繼續向下列舉。這句話可能看起來有點抽象,我們用乙個圖來演示一下。這是一張a村到e村的地圖。假設你從起點a出發到終點e 不是e1 在不知道路...

回溯遞迴演算法 八皇后問題

前,有皇帝。就拿八皇后。由此產生的一系列問題,凌亂。由此產生的八皇后問題。哈哈 開玩笑 八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即隨意兩個皇后都不能處於同一行 同一列或同一斜...

遞迴 八皇后問題(回溯演算法)

問題 在8x8的西洋棋的棋盤上擺八個皇后,使其不能夠互相攻擊。即任意兩個皇后不能夠處在同一行,同一列,或者是同一斜線,問有多少種擺法?92 思路分析 第乙個皇后放在第一行的第一列 第二個皇后從第二行第一列開始放,然後判斷可不可以,可以,就放第三個皇后,也從第三行第一列開始放 不可以在換下乙個位置,在...