c - n皇后問題
在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的n,求出有多少種合法的放置方法。
input
共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。
output
共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。
sample input
185sample output0
19210
#include
#include
intgetmethod
(const
int n)
;int
checkpoint
(int
*column,
const
int n)
;int
main()
else
if(n==end)
int method=
getmethod
(n);
printf
("%d"
,method)
;printf
("\n");
}return0;
}int
getmethod
(const
int n)
intcheckpoint
(int
*pcolumn,
const
int n)
//row表示當前要查詢的點的行數(1~n)
int flag=0;
//標誌變數,值為1表示找到的皇后的點不滿足條件
for(
int column1=
1; column1<=n; column1++
)//從row行的第1列開始尋找點,直到該行的最後一列}if
(flag==1)
pcolumn[row]
=column1;
//若滿足條件,記錄該行皇后的列數(縱座標)
row++
;//因為已找到,所以進入下一行
if(row-
1==n)
//若找齊所有皇后的點
else
} row--
;//若該行所有列數都找完,都找不到滿足條件的點,則回到上一行(上一層迴圈)
return pcolumn[0]
;//返回當前已找到的所有擺法
}
c n皇后問題
會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。乙個整數n 1 n 10 每行輸出對應一種方案,每種方案順序輸出每一行皇后所在的列號,相鄰兩數之間用空格隔開,按字典序輸出。如果不存在對應的...
DFS 回溯與剪枝 C N皇后問題
c n皇后問題 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。out...
問題 I n皇后問題
在n n 格的棋盤上放置彼此不受攻擊的n 個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於在n n格的棋盤上放置n個皇后,任何2 個皇后不放在同一行或同一列或同一斜線上。設計乙個解n 後問題的佇列式分支限界法,計算在n n個方格上放置彼此不受攻擊的n個皇...