覺得自己的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...