您的位置:首页 > 其它

A strange lift

2015-08-14 15:14 260 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1548

#include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

int n,a,b,dist[210],line[210][210],book[210];

int inf=0xfffffff;

int main()

{
while(1)
{
cin>>n;
if(n==0)
break;
cin>>a>>b;
int t;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)
line[i][j]=0;
else
line[i][j]=inf;
memset(book,0,sizeof(book));
for(int i=1;i<=n;i++)
{
cin>>t;
if(i+t<=n)
line[i][i+t]=1;
if(i-t>=1)
line[i][i-t]=1;
}
for(int i=1;i<=n;i++)
dist[i]=line[a][i];
book[a]=1;
for(int i=1;i<n;i++)
{
int min=inf;
int k;
for(int j=1;j<=n;j++)
if(min>dist[j] && !book[j])
{
k=j;
min=dist[j];
}
book[k]=1;
for(int j=1;j<=n;j++)
if(!book[j] && dist[j]>dist[k]+line[k][j])
dist[j]=dist[k]+line[k][j];
}
if(dist[b]==inf)
cout<<"-1\n";
else
cout<<dist[b]<<endl;
}
return 0;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: