c - n皇后問題
在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的n,求出有多少種合法的放置方法。
input共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。output共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。sample input
185
0
sample output
1
9210
#include #include #include using namespace std;
int queen[12], q[12]=, n, sum=0;
int check(int n) {
for(int i=0; i(1)打表。在main()中提前算出來從1到10的所有n皇后問題的答案,並儲存在陣列中,等讀取輸入後立刻輸出。如果不打表,而是輸入n後再單獨計算輸出,會超時。
(2)遞迴搜尋dfs()。遞迴程式十分簡潔,把第乙個皇后按行放到棋盤上,然後遞迴放置其他的皇后,直到放完。
(3)回溯判斷check()。判斷新放置的皇后和已經放好的皇后在橫向、縱向、斜對角方向是否衝突。其中,橫向並不需要判斷,因為在遞迴的時候已經是按不同行放置的。
(4)模組化程式設計。例如check()的內容很少,其實可以直接寫在dfs()內部,不用單獨寫成乙個函式。但是單獨寫成函式,把功能模組化,好處很多,例如邏輯清晰,容易差錯等。建議在寫程式的時候盡量把能分開的功能單獨寫成函式,這樣可以大大減少編碼和除錯的時間。
C N皇后問題
c n皇后問題 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。ou...
c n皇后問題
會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。乙個整數n 1 n 10 每行輸出對應一種方案,每種方案順序輸出每一行皇后所在的列號,相鄰兩數之間用空格隔開,按字典序輸出。如果不存在對應的...
hdu2553 N皇后問題 dfs回溯剪枝 打表
problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...