八皇后問題算是乙個回溯演算法的典型案例。雖然我不太懂回溯,但該問題很有內味(。・∀・)ノ゙,下面描述一下我的解法
八皇后問題指在乙個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 思路分析 第乙個皇后放在第一行的第一列 第二個皇后從第二行第一列開始放,然後判斷可不可以,可以,就放第三個皇后,也從第三行第一列開始放 不可以在換下乙個位置,在...