題目:problem description
在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的n,求出有多少種合法的放置方法。
input
共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。
output
共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。
解題思路:
八皇后的擴充套件,其實和八皇后也沒什麼本質的區別。因為要保證一排一列以及對角線上唯一,我們可以從上到下一排一排遍歷,每排保證乙個皇后,這樣將約束條件降到三個。
三個約束條件,一列很好保證,只需要乙個陣列
v[i]
,記錄第
i列是否被放置即可。而兩個斜對角線,其實我們也可以用同樣的方法記錄。對於從左上到右下的對角線,我們發現在對角線上的點
(xi,yi)
都有乙個規律,
xi-yi
的值相等。同樣對於右上到坐下的對角線上的點,
xi+yi
的值相等。所以我們可以用兩個陣列
r[xi-yi+n],l[xi+yi]
來分別記錄他們。需要注意,
xi-yi
的值可能為負數,所以我們再陣列上加乙個偏移量
n來保證其非負。
#include #include#define n 110
using namespace std;
int v[n],ans,l[n],r[n],d[n];
void dfs(int t,int n)
for(int i=1;i<=n;i++)
}}int main()
int n;
while(~scanf("%d",&n)&&n)
{cout<
hdu2533 N皇后問題
n皇后問題 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status practice hdu 2553 description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許...
hdu 2533 N皇后問題
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...
HDU 2553 N皇后問題
題目 problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數...