BZOJ 4809: 皇后

题目大意:

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\n",ans);
	return 0;
}

  

posted @ 2018-04-15 19:02  ~Silent  阅读(170)  评论(0编辑  收藏  举报
Live2D