ACM HDU 2553 N皇后問題

2022-06-10 05:48:08 字數 788 閱讀 7538

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

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

input

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

output

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

sample input

185

0

sample output

1

9210

解題思路:用dfs一行一行得進行擺放,x為當前行,n為總行數,用for迴圈來確定每一列,由於是一行一行得擺放所以不可能同行,只需要標記同列,與主對角線(左下到右上)平行的一條對角線上的行列和等於同乙個常數,副對角線(左上到右下)平行一條對角線行列差等於乙個常數,只不過會是負數,防止下標是負數我們可以進行+10,保證是乙個正數,利用這個性質來確定有沒有同行同列。

1 #include2

3int count=0;4

5bool ye[10],d1[50],d2[50];//

用於判斷對應豎行、主對角線、副對角線是否已經有棋

6bool check(int x,int

y)11

void dfs(int x,int

n)16

for(int i=0;i)22}

2324}25

intmain()

33return0;

34 }

HDU 2553 N皇后問題

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

DFS hdu2553 N皇后問題

直接搜尋就可以了 只是在標記陣列vis上可以作文章 vis 0 i 來標記x為i的是否已放了棋子 vis 1 i 來標記y為i的是否已放了棋子 vis 2 i 來標記x y為i的一斜行是否已放了棋子 vis 3 i 來標記x y n為i的是否已放了棋子 因為x y可能為負數,所以加上乙個n就不會出現...

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...