#include <bits/stdc++.h>
using namespace std;
int q[10000000][4];
struct asdf{
int _10,_7,_3;
};
int main()
{
q[0][0]=10;
q[0][1]=0;
q[0][2]=0;
q[0][3]=-1;
set<asdf> a;
int f=0,i=0;
asdf b;
int _num;
while(true)
{
b._10=q[f][0];
b._7=q[f][1];
b._3=q[f][2];
_num=q[f][3];
if(a.count(b))
{
continue;
}
if((b._10==5&&b._7==5)||(b._10==5&&b._3==5)||(b._3==5&&b._7==5))
{
break;
}
a.insert(b);
int c;
if(b._10>0&&b._7<7)
{
i++;
c=min(b._10,7-b._7);
q[i][0]=b._10-c;
q[i][1]=b._7+c;
q[i][2]=b._3;
q[i][3]=f;
}
if(b._10>0&&b._3<3)
{
i++;
c=min(b._10,3-b._3);
q[i][0]=b._10-c;
q[i][1]=b._7;
q[i][2]=b._3+c;
q[i][3]=f;
}
if(b._7>0&&b._3<3)
{
i++;
c=min(b._7,3-b._3);
q[i][0]=b._3;
q[i][1]=b._7-c;
q[i][2]=b._3+c;
q[i][3]=f;
}
if(b._7>0&&b._10<10)
{
i++;
c=min(10-b._10,b._7);
q[i][0]=b._10+c;
q[i][1]=b._7-c;
q[i][2]=b._3;
q[i][3]=f;
}
if(b._3>0&&b._10<10)
{
i++;
c=min(10-b._10,b._3);
q[i][0]=b._10+c;
q[i][1]=b._7;
q[i][2]=b._3-c;
q[i][3]=f;
}
if(b._3>0&&b._7<7)
{
i++;
c=min(b._3,7-b._7);
q[i][0]=b._3;
q[i][1]=b._7+c;
q[i][2]=b._3-c;
q[i][3]=f;
}
f++;
}
stack<int> d;
int n=_num;
while(n+1)
{
d.push(n);
n=q[n][3];
}
while(d.size())
{
cout<<d.top()<<endl;
d.pop();
}
}
直接跳转到了一个函数的定义