#include"iostream"
#include"algorithm"
#include"vector"
#include"stack"
#include"queue"
#include"map"
#include"cstring"
#include"cstdio"
#include"set"
#include"cmath"
using namespace std;
int a[18][18],b[18][18];
int m,n,ans,k;
int jc(int g)
{
    memset(b,0,sizeof(b));
    int sum=0,k,h;
    for(int i=1;i<=m;i++)
    {
        h=g&1;
        g=g>>1;
        b[1][i]=h;
        if(b[1][i]!=a[1][i]) 
          if(h==1) sum++;
          else return 0;
    }
    for(int i=2;i<=m;i++)
    for(int j=1;j<=m;j++)
    {
        k=b[i-1][j-1]+b[i-1][j+1]+b[i-2][j];
      if(k%2==1) b[i][j]=1;
      else b[i][j]=0;
      if(b[i][j]!=a[i][j])  
          if(b[i][j]==1) sum++;
          else return 0;
    }
    if(sum<ans)ans=sum;
 return 0;
}
int main()
{
    int r,h=1;
    scanf("%d",&r);
    while(r--)
    {
        ans=1000000000;
        scanf("%d",&m);
        int x=(1<<m)-1;
    for(int j=1;j<=m;j++)
    for(int i=1;i<=m;i++)
    {
        scanf("%d",&a[j][i]);
    }
    for(int i=0;i<=x;i++)
    jc(i);
    if(ans==1000000000)ans=-1;
    printf("Case %d: %d\n",h++,ans);
    }
    return 0;
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐