hdu1548 a strange lift

来源:互联网 发布:php网页自动生成html 编辑:程序博客网 时间:2024/06/05 18:33

这道题可以用BFS来做,也可以用最短路算法来做,建好图就可以了。

#include<stdio.h>#include<stdlib.h>int main(){    int a,B,i,n,u,v,j,min;    int inf=99999999;    int dis[220],b[220],e[220][220],k[220];    while(scanf("%d",&n),n!=0)    {        scanf("%d%d",&a,&B);        for(i=1; i<=n; i++)            scanf("%d",&k[i]);        for(i=1; i<=n; i++)            for(j=0; j<=n; j++)                if(i==j)                    e[i][j]=0;                else                    e[i][j]=inf;        for(i=1; i<=n; i++)//输入边,注意当<=1或者>=n时电梯是不运行的;        {            if(i+k[i]<=n)                e[i][i+k[i]]=1;            if(i-k[i]>=1)                e[i][i-k[i]]=1;        }        for(i=1;i<=n;i++)        {            dis[i]=e[a][i];            b[i]=0;        }        b[a]=1;        for(i=1;i<n;i++)        {            min=inf;            for(j=1;j<=n;j++)            {                if(dis[j]<min&&b[j]==0)                {                    u=j;                    min=dis[j];                }            }            b[u]=1;            for(v=1;v<=n;v++)            {                if(b[v]==0&&e[u][v]<inf&&dis[v]>dis[u]+e[u][v])                    dis[v]=dis[u]+e[u][v];            }        }        if(dis[B]>=inf)            printf("-1\n");        else            printf("%d\n",dis[B]);    }    return 0;}


1 0
原创粉丝点击