《八皇后問題》dfs 回溯

2021-10-02 10:00:11 字數 924 閱讀 1699

這是個比較經典的問題了,以前看見都沒怎麼動手寫,今天看見了,決定寫一些。

思路:我們dfs每一行上的每個數,滿足條件就加入陣列繼續搜,搜完一遍重置資料,這就是回溯的思想,不影響下一次搜尋。

我一開始被卡在了對角線有沒有被搜尋過的判斷上了。後面發現。

從左下角到右上角的每一條對角線都可以用vis[i+j]來表示。

而從左上角到右下角的每一條對角線都可以用vis[i-j]來表示,因為i-j可能會小於n,所以我們表示為vis[i-j+n]。

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int n =

200;

#define inf int_max

#define inm int_min

int n,vis1[n]

,vis2[n]

,vis3[n]

,num =

3,ans[n]

,anss=0;

//vis1表示左上到右下的對角線(i+j),vis2表示左下到右上的對角線,ans為輸出陣列

void

print()

printf

("\n");

}}void

dfs(

int x)

for(

int j=

1;j<=n;

++j)}}

intmain()

八皇后(dfs 回溯)

重看了一下劉汝佳的白板書,上次寫八皇后時並不是很懂,再寫一次 方法1 逐行放置皇后,然後遞迴 1 include 2 define maxn 8 3 define ll long long 4using namespace std 56 ll ans 0 7 intc maxn 89 void df...

回溯 八皇后問題

八皇后問題 國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。分析 八皇后問題是回溯演算法的典型案例。我想我們在自己做的過程中,是這樣的 是先從 0,0 這個座標開始排放皇后,然後 1...

八皇后問題 回溯

在劉汝佳老師的書中對於8皇后問題的分析 我感覺非常經典 8皇后問題可行的解 92個 一共有3種思考的出發點 從64個格仔中選乙個子集,使得 子集中恰好有8個格仔,且任意兩個選出的格仔都不在同一行,同一列或同一對角線上 這正是子集的列舉問題。然而,64個格仔的子集有264個,太大了,這並不是乙個很好的...