時限:1000ms 記憶體限制:10000k 總時限:3000ms
在8×8( n×n )格的西洋棋上擺放n個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。
沒有輸入
每個結果第一行是no n:的形式,n表示輸出的是第幾個結果;
下面8行,每行8個字元,『a』表示皇后,『.』表示空格。
不同的結果中,先輸出第乙個皇后位置靠前的結果;第乙個皇后位置相同,先輸出第二個皇后位置靠前的結果;依次類推。
提示輸出樣例是正確輸出結果的前幾行。
①用陣列q存放皇后的位置,q[k]表示第k個皇后放置的位置,n皇后問題的乙個解是: q[1],q[2],…,q[n],數 組q的下標0元素不用。
②先放置第1個皇后,然後依2、3、…、n的次序放置其他皇后,當第n個皇后放置好後產生乙個解。為了找所有解,此時演算法還不能結束,繼續試探第n個皇后的下乙個位置。
③第k(k#include
#include
using namespace std;
int num=0;
int chessboard[8]
;void
dfs(
int k)
;void
print_chessboard
(int m)
;bool check_place
(int x,
int y)
;int
main()
void
dfs(
int k)
else}}
}bool check_place
(int x,
int y)if(
fabs
(x-i)
==fabs
(y-chessboard[i]))
//判斷是否和之前放的皇后在同一斜行
}return true;
}void
print_chessboard
(int m)
else
}printf
("\n");
}}
NOJ 1007 8皇后問題
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述輸出8皇后問題所有結果。輸入沒有輸入。輸出每個結果第一行是no n 的形式,n表示輸出的是第幾個結果 下面8行,每行8個字元,a 表示皇后,表示空格。不同的結果中,先輸出第乙個皇后位置靠前的結果 第乙個皇后位置相同,先輸出第二個...
回溯演算法 8皇后
回溯演算法的本質是深度優先搜尋,回溯又叫試探法 backtracking 深度優先遇到障礙再返回來。回溯法要先定義乙個解空間,用便於搜尋的方式整理解空間,然後深度優先搜尋。八皇后問題 解空間?八個皇后在棋盤上面的排列位置可以用乙個8元陣列表示,x1,x2,x3,x4,x5,x6,x7,x8代表第i行...
迭代回溯 8皇后
八皇后問題 就是在8 8格仔上放8個皇后 皇后是可以橫行豎行斜行行走 他們之間不能存在可以被吃的關係 演算法 迭代回溯法 思路是這樣 紅色框代表put 函式裡的if沒有通過 就不再有進一步迭代 子樹 進行下乙個1皇后2列的進一步匹配 陣列q key是行數 value是列數 max1 n皇后 圖 de...