演算法實驗二 (DFS 回溯) 8皇后問題

2021-09-29 07:00:20 字數 1226 閱讀 8373

時限:1000ms 記憶體限制:10000k  總時限:3000ms

描述輸出8皇后問題所有結果。

輸入沒有輸入。

輸出每個結果第一行是no n:的形式,n表示輸出的是第幾個結果;下面8行,每行8個字元,『a』表示皇后,『.』表示空格。不同的結果中,先輸出第乙個皇后位置靠前的結果;第乙個皇后位置相同,先輸出第二個皇后位置靠前的結果;依次類推。

輸入樣例

輸出樣例

輸出的前幾行:

no 1:

a.......

....a...

.......a

.....a..

..a.....

......a.

.a......

...a....

no 2:

a.......

.....a..

.......a

..a.....

......a.

...a....

.a......

....a...

提示輸出樣例是正確輸出結果的前幾行。

#include #include #define legal(y, x) (!c[x] && !p(y, x) && !q(y, x)) 

#define p(y, x) p[y+x+offset]

#define q(y, x) q[y-x+offset]

int a[9]; // a[i] 表示 i 行位於 a[i] 列

int c[9], p[40], q[40];

// c[i] means the col i has c[i] queens

const int offset = 20;

int dfs(int k, int n)

for(int i=0; i#include int dfs(int k, int n, ...)

for(i in range()) }

}*/

以下是神奇的n皇后問題: 

#include#include#define n 20

int q[n];

int count=0;

void dispasolution(int n)

printf("\n");

} bool place(int i,int j)

} }}int main()

}

回溯演算法 8皇后

回溯演算法的本質是深度優先搜尋,回溯又叫試探法 backtracking 深度優先遇到障礙再返回來。回溯法要先定義乙個解空間,用便於搜尋的方式整理解空間,然後深度優先搜尋。八皇后問題 解空間?八個皇后在棋盤上面的排列位置可以用乙個8元陣列表示,x1,x2,x3,x4,x5,x6,x7,x8代表第i行...

《八皇后問題》dfs 回溯

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

回溯法之二 8皇后問題

八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯1850年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上.問題分析 第一步 定義問題的解空間 這個問題解空間就是8個皇后在棋盤中的位置.第二步 定 ...