HDU 2553 N皇后問題(DFS經典題)

2021-08-15 04:20:26 字數 781 閱讀 3933

是dfs的比較典型的一道題,但需要注意的是需要提前打表,不然會超時……

題目:在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。

你的任務是,對於給定的n,求出有多少種合法的放置方法。

input共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。

output共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。

sample input

185

0

sample output
1

9210

編寫dfs函式思路:

因為每行只會有乙個皇后,所以 「不允許在同一行」 的情況可以不用考慮;嘗試在每一行的每一列放皇后,對於每一列,如果滿足放的條件(即放在這裡不會和前面已放的發生同列或同對角線的情況),就繼續放下一行,直到把n行放完,即可得到一種放法(tot++)。

下面是**:

#include #include#include#includeusing namespace std;

int n,vis[10],tot,a[10],ans[15];

void dfs(int cur)

}if(ok)

} }}

int main(void)

int n1;

while(~scanf("%d",&n1)&&n1)

}

HDU2553 N皇后問題(DFS)

problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...

HDU2553 N皇后問題(dfs)

description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結...

HDU2553 N皇后問題 DFS

problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...