祈祷三连唱:
千万不要写错笔误
千万不要写错笔误
千万不要写错笔误
#include<bits/stdc++.h>
using namespace std;
struct ST{
int Cl[10];//存时钟状态
int ans[30];//存储到达这个位置的路径
int cnt;//记录已经选了哪些方法(路径)
};
bool vis[4][4][4][4][4][4][4][4][4];
int f[10][10]={
{0,0,0,0,0,0,0,0,0,0},
{0,1,1,0,1,1,0,0,0,0},
{0,1,1,1,0,0,0,0,0,0},
{0,0,1,1,0,1,1,0,0,0},
{0,1,0,0,1,0,0,1,0,0},
{0,0,1,0,1,1,1,0,1,0},
{0,0,1,0,0,1,0,0,0,1},
{0,0,0,0,1,1,0,1,1,0},
{0,0,0,0,0,0,0,1,1,1},
{0,0,0,0,0,1,1,0,1,1},
};
queue<ST>Q;
int main()
{
ST t={0};
for(int i=1;i<=9;i++)
{
cin>>t.Cl[i];
t.Cl[i]=t.Cl[i]/3%4;
}
Q.push(t);
while(!Q.empty())
{
ST p=Q.front();
Q.pop();
int flag=1;
for(int i=1;i<=9;i++)
{
if(p.Cl[i]!=0)
{
flag=0;
}
}
if(flag==1)
{
for(int i=1;i<=p.cnt;i++)
{
cout<<p.ans[i]<<" ";
}
break;
}
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
t.Cl[j]=(t.Cl[j]+f[i][j])%4;
}
if(vis[t.Cl[1]][t.Cl[2]][t.Cl[3]][t.Cl[4]][t.Cl[5]][t.Cl[6]][t.Cl[7]][t.Cl[8]][t.Cl[9]]==0)
{
vis[t.Cl[1]][t.Cl[2]][t.Cl[3]][t.Cl[4]][t.Cl[5]][t.Cl[6]][t.Cl[7]][t.Cl[8]][t.Cl[9]]=1;
t.cnt++;
t.ans[t.cnt]=i;
Q.push(t);
}
}
}
}