#include<cstdlib>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include <algorithm>
#include<set>
#include<queue>
#define LL long long
#define inf 0x7fffffff
#define E 1e-9
#define M 100
#define N 17
using namespace std;
int n,T;
bool ma[N][N],t[N][N];
int pan(int k)
{
int num=0;
memset(t,0,sizeof(t));
for (int i=0;i<n;++i )
{
if(k&(1<<i))
{
t[0][i]=1;
if(ma[0][i]==0)
num++;
}
else if(ma[0][i]==1)
return inf;
}
for(int i=0;i<n-1;i++)
for(int j=0;j<n;j++)
{
int s=0;
if(i>0) s+=t[i-1][j];
if(j>0) s+=t[i][j-1];
if(j<n-1) s+=t[i][j+1];
s=s%2;
if(ma[i+1][j]==1&&s==0)
return inf;
if(ma[i+1][j]==0&&s==1)
{
num++;
}
t[i+1][j]=s;
}
return num;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ex.in","r",stdin);
#endif
scanf("%d",&T);
int ncase=0;
while(T--)
{
scanf("%d",&n);
for (int i=0;i<n;++i )
for(int j=0;j<n;++j)
scanf("%d",&ma[i][j]);
int s=1<<n;
int minv=inf;
for(int i=0;i<s;i++)
{
int ans=pan(i);
minv=minv<ans?minv:ans;
}
printf("Case %d: ",++ncase);
printf("%d\n",minv==inf?-1:minv);
}
return 0;
}
训练指南uva 11464
最新推荐文章于 2020-11-01 12:25:46 发布