HDU 2553 n皇后(簡單深搜)

2021-08-19 16:13:35 字數 1238 閱讀 3054

hdu 2553

題目描述:

problem description

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

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

input

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

output

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

sample input

1 8 5 0

sample output

1 92 10

解題思路:

這是一道簡單的深搜題目,搜尋其實也算是一種遍歷,找遍所有的結果,然後打表,輸出需要的即可;

**篇:

#include 

#include

#include

using namespace std;

int n;///方陣大小,也就是規模

int ans;///結果數量

int vis[12][12];///放皇后的位置標記

int row[12],col[12];///每一橫行和每一豎列標記

int table[12];///結果打表

bool check(int i,int j)///檢查橫行豎列有無棋子(能否放下皇后)

for(s=i-1,t=j-1; s>=0&&t>=0; s--,t--)

for(s=i-1,t=j+1; s>=0&&tif(vis[s][t]) return

false;

}for(s=i+1,t=j-1; s=0; s++,t--)

return

true;///若無,則返回true

}void dfs(int j)

for(int i=0; ibool flag=check(i,j);///檢查能否放下皇后

if(flag)

}}int main()

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

return

0;}

HDU 2553 N皇后問題(深搜 回溯)

回溯法,一直錯在了標記為1,0上面,應該標記為 這樣回溯的時候才不會把別人的點還原 同時,這一題要記錄下來這10個的answer,否則tle include include includeusing namespace std int t,k,n char map 105 105 void dfs ...

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