P1220 皇后摆放问题
槽点:要写成i=x
#include <bits/stdc++.h>
using namespace std;
const int maxn=10;
int a[maxn][maxn],row[maxn],col[maxn],rp[2*maxn],rd[2*maxn],cnt,ans;
void dfs(int x,int y) {
if(cnt==8){ ans++; }
int i,j;
for(i=x;i<8;i++){
if(row[i]) continue;
for(j=0;j<8;j++){
if(col[j] ||rd[j-i+maxn] ||rp[j+i]) continue;
row[i]=1;col[j]=1;rd[j-i+maxn]=1;rp[j+i]=1;
cnt++;
// std::cout << cnt << '\n';
dfs(i,j);
}
}
row[x]=0;col[y]=0;rd[y-x+maxn]=0;rp[y+x]=0;
cnt--;
// std::cout << cnt << '\n';
}
int main ()
{
for(int i=0;i<8;i++)
for(int j=0;j<8;j++){
scanf("%d",&a[i][j]);
if(a[i][j]) {
cnt++;
row[i]=1;col[j]=1;rd[j-i+maxn]=1;rp[j+i]=1;
}
}
dfs(0,0);
std::cout << ans << '\n';
return 0;
}