以灯的状态为点跑bfs
#include <bits/stdc++.h>
#define PII pair<int,int>
using namespace std;
int N,M;
vector<int>gra[1<<11];
int a[105][15];
bool vis[1<<11];
int bfs()
{
queue<PII>q;
q.push({(1<<N)-1,0});
vis[(1<<N)-1]=1;
while(q.size())
{
int u=q.front().first,d=q.front().second;
q.pop();
if(u==0) return d;
for(auto v:gra[u])
{
if(vis[v]) continue;
vis[v]=1;
q.push({v,d+1});
}
}
return -1;
}
int main()
{
scanf("%d %d",&N,&M);
for(int i=1;i<=M;i++)
for(int j=1;j<=N;j++)
scanf("%d",&a[i][j]);
for(int i=0;i<(1<<N);i++)
{
for(int j=1;j<=M;j++)
{
int nxt=0;
for(int k=1;k<=N;k++)
{
nxt<<=1;
int dig=(i>>k-1)&1;
if(a[j][k]==1&&dig==1) dig=0;
else if(a[j][k]==-1&&dig==0) dig=1;
nxt+=dig;
}
gra[i].push_back(nxt);
}
}
printf("%d\n",bfs());
return 0;
}