今天的主菜是搜尋,想起來初中就聽過八皇后問題了啊。。。當年有乙個學程式設計的機會在我眼前我沒有去珍惜,到現在我只能默默後悔。。。嘛,其實我也沒那麼在意啦
皇后的移動方式是直線和斜線不限長移動,畢竟最強兵種。
所以每一行必然只有乙個皇后,因此我們可以選擇以每行為單位來進行dfs(深度優先搜尋)。
然後是豎向和斜向,豎向只要位置不同就可以了,用乙個bool型陣列來記錄,斜向的話,只要x+y不同和x-y不同就可以保證不同行。
然後筆者就被坑了。。。
原因不明,但是肯定是出題者的陰謀。總之肯定是給了很多資料,因此我們需要預先處理一下,用乙個陣列儲存現有的10種狀態。
#include#include#include#includeusing namespace std;
bool side1[25],side2[25];
bool vis[11];
int n;
int ans;
int answer[20];
void dfs(int x)
for(int i=0;i
ACM 搜尋 HDU 2553 N皇后問題
problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...
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...