直接搜尋就可以了
只是在標記陣列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...