hdu2553 N皇后問題

2021-09-01 09:46:40 字數 1637 閱讀 2338

覺得自己的dfs水平特別的渣,所以練習寫dfs

n皇后問題,什麼意思都知道,

我開了四個判重陣列,visx,visy分別代表此行,此列有沒有在攻擊範圍中

vis1代表了從左下到右上這條對角線,vis2代表左上到右下,對點(x,y)來說,vis1的唯一標識是x+y

vis2的唯一標識是n-(y-x)即n-y+x;因為每一行只能放乙個 ,所以我們只針對列進行dfs就可以了,

還有此題的測試資料特別那啥,10個資料來來回回測幾十遍,知道測到你超時為止!!汗!!!

code

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define si set#define ll long long

#define pb push_back

#define ps printf(" ")

#define vi vector#define ln printf("\n")

#define lson l,m,rt << 1

#define rson m+1,r,rt<<1|1

#define sd(a) scanf("%d",&a)

#define pd(a) printf("%d",a)

#define set(a,b) memset(a,b,sizeof(a))

#define ff(i,a) for(int i(0);i<(a);i++)

#define fd(i,a) for(int i(a);i>=(1);i--)

#define for(i,a,b) for(int i(a);i<=(b);i++)

#define fod(i,a,b) for(int i(a);i>=(b);i--)

#define readf freopen("input.txt","r",stdin)

#define writef freopen("output.txt","w",stdout)

const int maxn = 30;

const long long bigp=999983;

const int inf = 0x3fffffff;

const int dx=;

const int dy=;

const double pi = acos(-1.0);

const double eps= 1e-7;

using namespace std;

//int n,ans;

//bool visx[maxn],visy[maxn],vis1[maxn],vis2[maxn];

vis1 2-2n vis2 1-(2n-1);

p is 列

//bool can(int x,int y)

//void dfs(int p)

// for(i,1,n)

// }

//}int a[11];

int main()

// for(i,1,10)

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