hdu 2533 N皇后問題

2021-07-13 10:30:56 字數 948 閱讀 8006

題目: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,表示棋盤和皇后的數...