#include<stdio.h>
#include<string.h>
#define inf 9999999
int map[210][210],dis[210],v[210];
int n;
void dij(int s)
{
int t,max,i,j;
for(i=1;i<=n;i++)
{
dis[i]=map[s][i];
v[i]=0;
}
dis[s]=0;
v[s]=1;
for(i=2;i<=n;i++)
{
max=inf;
for(j=1;j<=n;j++)
if(!v[j]&&dis[j]<max)
{
t=j;
max=dis[j];
}
v[t]=1;
if(max==inf)break;
for(j=1;j<=n;j++)
if(!v[j]&&dis[j]>dis[t]+map[t][j])
dis[j]=dis[t]+map[t][j];
}
}
int main()
{
int i,j,a,b,c;
while(scanf("%d",&n),n)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i!=j)
map[i][j]=inf;
else
map[i][j]=0;
scanf("%d%d",&a,&b);
for(i=1;i<=n;i++)
{
scanf("%d",&c);
if(i-c>=1)map[i][i-c]=1;//不能到地下面去
if(i+c<=n)map[i][i+c]=1;//不能到楼顶上去
}
dij(a);
if(dis[b]!=inf)
printf("%d\n",dis[b]);
else
printf("-1\n");
}
return 0;
}
hdu 1548(最短路)
最新推荐文章于 2020-08-08 21:25:35 发布