N皇后問題 HDU 2553

2021-08-21 16:12:15 字數 1016 閱讀 9128

問題:

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

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

input

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

output

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

sample input

185

0

sample output

1

9210

思路:

1:注意是n行,n列,放n個皇后,所以每一行都要放乙個。

2:雖然資料就1~10,但如果先不好打表,很可能會超時。

3:因為乙個皇后所在的行,列和對角線都不能有皇后,所以如何標記很重要。行和列可以直接用兩個陣列表示在的幾行,第幾列被標記了,對角線就要找行和列之間的關係,撇對角線(撇是啥都懂的吧)上行減列的值是乙個定值(y-x=c,數學公式),捺對角線行加列是個定值(x+y=c)就用這個性質標記。

**:

#include#include#include#includeusing namespace std;

int k[12];//打表

int book[12];//標記列

int bx[30];//標記撇對角線

int by[30];//標記捺對角線

int ma,y;

void dfs(int x)//因為每一行都要放皇后,所以不用標記,直接以行作為遞迴深度就行了

for(int i=1; i<=y; i++)

}return;

}int main()

int n;

while(scanf("%d",&n)&&n)

return 0;

}

N皇后問題 HDU 2553

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

N皇后問題 HDU 2553

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

N皇后問題 HDU 2553

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