答案我永远少2
#include<iostream>
#include<cstring>
using namespace std;
int A,B,T,n,Min=1000000000,s[100005],ans[100005];
bool vis[1005][1005]={0};
void dfs(int a,int b,int step)
{
if(b==n)
{
if(Min>step)
{
Min=step;
for(int i=1;i<=Min;i++)
{
ans[i]=s[i];
}
}
return;
}
if(vis[a][b])
{
return;
}
vis[a][b]=true;
if(a!=A)s[step+1]=1,dfs(A,b,step+1);
if(b!=B)s[step+1]=2,dfs(a,B,step+1);
if(a!=0)s[step+1]=3,dfs(0,b,step+1);
if(b!=0)s[step+1]=4,dfs(a,0,step+1);
int t=min(A-a,b);
if(a!=A)s[step+1]=5,dfs(a+t,b-t,step+1);
t=min(a,B-b);
if(b!=B)s[step+1]=6,dfs(a-t,b+t,step+1);
return;
}
int main()
{
scanf("%d",&T);
while(T--)
{
memset(vis,0,sizeof(vis));
scanf("%d%d%d",&A,&B,&n);
Min=1000000000;
dfs(0,0,0);
printf("%d ",Min);
for(int i=1;i<=Min;i++)
{
printf("%d ",ans[i]);
}
printf("\n");
}
return 0;
}