DFS hdu2553 N皇后問題

2021-07-03 22:53:00 字數 654 閱讀 2900

直接搜尋就可以了

只是在標記陣列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就不會出現負數了

最後,,因為測試樣例非常多,但是n<=10,所以還需要打表

#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef pairpii;

const int mx = 100 + 5;

const int inf = 0x3f3f3f3f;

int n,ans[mx];

int vis[4][mx];

void dfs(int x,int &ans)

for(int y=1;y<=n;y++)

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