時限: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個皇后在棋盤中的位置.第二步 定 ...