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