题目大意:
n皇后问题,有些格子不能放。
题解:
直接暴力,并不用加优化就能过。
代码:
#include<cstdio> using namespace std; int cc,n,ans,a[105][105],vis1[105],vis2[105],vis3[105],vis4[105]; void dfs(int t){ if (t>n){ ans++; return; } for (int i=1; i<=n; i++) if (!a[t][i] && !vis1[i] && !vis2[i] && !vis3[t+i] && !vis4[t-i+20]){ vis1[i]=vis2[i]=vis3[t+i]=vis4[t-i+20]=1; dfs(t+1); vis1[i]=vis2[i]=vis3[t+i]=vis4[t-i+20]=0; } } int main(){ scanf("%d",&n); cc=0; for (int i=1; i<=n; i++) for (int j=1; j<=n; j++){ scanf("%d",&a[i][j]); if (!a[i][j]) cc++; } dfs(1); printf("%d ",ans); return 0; }