#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<sstream>
using namespace std;
#define L 101
const int N=5,A=1,B=5;
int a[N+1]={0,3,3,1,2,5};
int head=0,tail=1; //tail指向空白
//j<m时 f[i][j] = f[i-1][K+j-m] + a[i];
int g[N+1]={0}; //占位;
struct line{
int c; //楼层
int s=0; //次数
}b[L]; //模仿队列
int c=0;
bool flag=false;
int main()
{
//初始化队列
b[head].c = A;
g[A]=1;
while(head<tail){
head++;
c = b[head-1].c;
if(c==B){
flag = true;
cout << b[head-1].s;
break;
}
if(c+a[c] <= N && !g[c+a[c]]){ //可以向上走
g[c+a[c]] = 1; //先占领后发展
b[tail].c = c+a[c];
b[tail].s = b[head-1].s+1;
tail++;
}
if(c-a[c] >=1 && !g[c-a[c]]){
g[c-a[c]] = 1; //先占领后发展
b[tail].c = c-a[c];
b[tail].s = b[head-1].s+1;
tail++;
}
}
if(!flag)cout << -1;
return 0;
}
//cout << "输入:"
结果:
