rt,位运算过于毒瘤
#include <bits/stdc++.h>
using namespace std;
queue<int> r;
bool mark[513];
int step[513],ans;
int constr(int x,int k)
{
int state=x^(1<<k);
if (k>2) state^=(1<<(k-3));
if (k<6) state^=(1<<(k+3));
if (k%3!=0) state^=(1<<(k-1));
if (k%3!=2) state^=(1<<(k+1));
return state;
}
void bfs(int root)
{
int u,v,i;
r.push(root),mark[root]=true;
step[root]=0;
while(!r.empty())
{
u=r.front(),r.pop();
for(i=1;i<=9;i++)
{
v=constr(u,i-1);
if (!mark[v])
{
if (v==0 || v==511)
{
ans=step[u]+1;
return;
}
r.push(v),mark[v]=true;
step[v]=step[u]+1;
}
}
}
}
int main()
{
//打开所有的灯
int lig,sta=0,i;
for(i=1;i<=9;i++)
{
scanf("%d",&lig);
if (lig==1) sta+=(1<<(9-i));
}
if (sta==0 || sta==511)
{
printf("0");
return 0;
}
bfs(sta);
printf("%d",ans);
}