【HDU 1548】【BFS】A strange lift
実はポイントは、入力の順番は各階で押すしかないので、順番ではないので、最初はいつも間違っていたと思っていました.
理屈を言えば最短でもいいから、お任せします.
理屈を言えば最短でもいいから、お任せします.
#include "iostream"
#include "algorithm"
#include "queue"
using namespace std;
int a,b,n;
int vis[205],lift[205];
bool check(int x)
{
if(x>=0 && x<=n && vis[x]==0)
return true;
return false;
}
int main(int argc, char const *argv[])
{
while(~scanf("%d",&n),n)
{
queue<int> q;
memset(vis,0,sizeof(vis));
memset(lift,0,sizeof(lift));
scanf("%d %d",&a,&b);
for (int i = 1; i <= n; ++i)
scanf("%d",&lift[i]);
int flag=1;
q.push(a);
vis[a]=1;
while(!q.empty())
{
int t1=q.front();
q.pop();
if(t1==b)
{
flag=1;
break;
}
int t2=t1+lift[t1];
//printf("%d
",t2);
if(check(t2))
{
vis[t2]=vis[t1]+1;
q.push(t2);
//printf("1
");
}
t2=t1-lift[t1];
//printf("%d
",t2);
if(check(t2))
{
vis[t2]=vis[t1]+1;
q.push(t2);
//printf("2
");
}
}
flag?printf("%d
",vis[b]-1):printf("-1
");
}
return 0;
}