八皇后(dfs 回溯)

2022-02-20 03:42:05 字數 696 閱讀 8383

重看了一下劉汝佳的白板書,上次寫八皇后時並不是很懂,再寫一次:

方法1:逐行放置皇后,然後遞迴;

**:

1 #include 2

#define maxn 8

3#define ll long long

4using

namespace

std;

56 ll ans=0;7

intc[maxn];89

void dfs(int

cur)

1025}26

if(flag)

2730}31

}32}33

34int main(void)35

方法2:思路和方法1差不多,區別是用二維陣列vis[2]來標記之前皇后的位置,判斷是否會相互攻擊

**:

1 #include 2

#define maxn 8

3#define ll long long

4using

namespace

std;

56 ll ans=0;7

int c[maxn], vis[3][2*maxn];89

void dfs(int

cur)

1023}24

}25}26

27int main(void)28

《八皇后問題》dfs 回溯

這是個比較經典的問題了,以前看見都沒怎麼動手寫,今天看見了,決定寫一些。思路 我們dfs每一行上的每個數,滿足條件就加入陣列繼續搜,搜完一遍重置資料,這就是回溯的思想,不影響下一次搜尋。我一開始被卡在了對角線有沒有被搜尋過的判斷上了。後面發現。從左下角到右上角的每一條對角線都可以用vis i j 來...

八皇后回溯

八皇后問題 在8x8格棋盤上擺放8個皇后,任意兩個皇后不能處於同一行 同一列 同一斜線上,問有多少種擺法。思路 第乙個皇后放在第一行第一列 第二個皇后從第二行第一列開始檢測,如果不行,放在第二列 第三列 一直到放完所有皇后,如果中途發現有衝突,回溯改變先前放置的皇后位置 使用乙個一位陣列表示,下標表...

回溯演算法 八皇后

總時間限制 1000ms 記憶體限制 65536kb 描述 會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b 1b2....