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