这题是为了练习搜索找的,结果用最短路解决了,现在时间不早了!赶明儿用搜索写一个!
题意很好懂!!!一个电梯的事儿!!!
#include<stdio.h>
#include<string.h>#define inf 10000000
int main()
{
int n,A,B,map[201][201],i,j,k,s,sum[201],visited[201];
while(scanf("%d",&n),n)
{
memset(visited,0,sizeof(visited));
scanf("%d%d",&A,&B);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=inf;
for(i=1;i<=n;i++)
{
scanf("%d",&s);
if(i+s<=n)
map[i][i+s]=1;
if(i-s>=1)
map[i][i-s]=1;
}
for(i=1;i<=n;i++)
sum[i]=map[A][i];
sum[A]=0;
for(i=1;i<=n;i++)
{
int min=inf;
for(j=1;j<=n;j++)
if(visited[j]==0&&sum[j]<min)
{
min=sum[j];
k=j;
}
if(min==inf)
break;
visited[k]=1;
for(j=1;j<=n;j++)
if(visited[j]==0&&sum[j]>map[k][j]+sum[k])
sum[j]=sum[k]+map[k][j];
}
if(sum[B]==inf)
printf("-1\n");
else
printf("%d\n",sum[B]);
}
return 0;
}
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548