描述
问题出在这里:当你在A楼,而你想去B楼时,至少他必须按下“UP”或“DOWN”按钮多少次?
输入
第一行包含上述三个整数N,A,B(1 <= N,A,B <= 200),第二行由N个整数k1,k2,... kn组成。
单个0表示输入结束。
产量
示例输入
示例输出
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
using namespace std;
struct
{
int s;
int e;
int p;
} x[1000];
int dis[1000];
int n,ci,s,e;
int maxx=0x3f3f3f3f;
void BellmanFord()
{
int i,j,ge=0,t;
memset(dis,maxx,sizeof(dis));
dis[s]=0;
for(i=1; i<=n-1; i++)
{
for(j=0; j<=ci-1; j++)
{
if(dis[x[j].e]>dis[x[j].s]+x[j].p)
dis[x[j].e]=dis[x[j].s]+x[j].p;
}
}
if(dis[e]==maxx)
printf("-1\n");
else
printf("%d\n",dis[e]);
}
int main()
{
int i,a[210];
for(;;)
{
ci=0;
scanf("%d",&n);
if(n==0)
break;
scanf("%d%d",&s,&e);
for(i=1; i<=n; i++)
scanf("%d",&a[i]);
for(i=1; i<=n; i++)
{
if(a[i]+i<=n)
{
x[ci].s=i;
x[ci].e=i+a[i];
x[ci++].p=1;
}
if(i-a[i]>=1)
{
x[ci].s=i;
x[ci].e=i-a[i];
x[ci++].p=1;
}
}
BellmanFord();
}
return 0;
}