是dfs的比較典型的一道題,但需要注意的是需要提前打表,不然會超時……
題目:在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的n,求出有多少種合法的放置方法。
input共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。
output共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。
sample input
185sample output0
19210
編寫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,表示棋盤和皇后的數量 如...