HDU 2553 N皇后問題

2021-07-15 02:28:25 字數 1060 閱讀 9907

n皇后問題

problem description

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

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

input

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

output

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

sample input

185

0

sample output

1

9210

分析:題目意思就是在某一行的某一列放置乙個皇后,然後在他的同一行,同一列以及45°對角線都不能放置皇后,求存在多少種放置方案。所以的話,我的思路就是用從第一行開始遍歷,用乙個陣列id[i]表示第i行的皇后放置在哪一列。由於我是按行遍歷的,因此在考慮當前行當前列是否可以放置的時候,只需要考慮是否同一列或者在45°對角線上,同一列的問題,可以考慮cur行之前的放置情況,用id[cur]與id[i]來判斷,cur表示當前行;對角線的問題,很容易可以發現,判斷它們斜率的絕對值是否等於1(紫書上也有一種判斷方法,菜鳥沒看懂,只能用自己的方法來判斷),如果可以放置,則進行cur+1行的操作,直到n-1行,否則考慮另一列。判斷一套方案是否成立的條件是cur==n。下面**用了預處理的方法~

下面上**:

#include#include#include#includeusing namespace std;

int id[12];

int n;

int count1;

int a[12];

void dfs(int cur,int t)

else

}if(flag==1)

dfs(cur+1,t);}}

}int main()

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

return 0;

}

HDU 2553 N皇后問題

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

HDU 2553 N皇后問題

復健。一題經典的回溯法,要打表。include define max n 11 int n,res int c max n ans max n void dfs int cur if flag dfs cur 1 int main int m while scanf d m m printf d n...

HDU 2553 N皇后問題

題目資訊 一種非常有用的二進位制優化方法 hdu2553n皇后問題 problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。in...