hdu 1548(最短路)

来源:互联网 发布:如何防止盗取网页源码 编辑:程序博客网 时间:2024/06/05 00:29

点击打开链接

#include<stdio.h>#include<string.h>#define inf 9999999int 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;}


0 0
原创粉丝点击