• hdu 1548 A strange lift


    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int inf=10024;
    int mp[200+5][200+5],dist[200+5],n,vis[200+5];
    
    void Dijkstra(int v0)
    {
        int i,j,k,u,minx;
        for(i=1;i<=n;i++)
        {
            dist[i]=mp[v0][i];
            vis[i]=0;
        }
        vis[v0]=1;
        dist[v0]=0;
        for(i=0;i<n-1;i++)
        {
            minx=inf,u=v0;
            for(j=1;j<=n;j++)
            {
                if(!vis[j]&&dist[j]<minx)
                {
                    minx=dist[j];
                    u=j;
                }
            }
            vis[u]=1;
            for(k=1;k<=n;k++)
            {
                if(!vis[k]&&mp[u][k]<inf)
                    dist[k]=min(dist[k],dist[u]+mp[u][k]);
            }
        }
    }
    
    int main()
    {
        int a,b,k,i,j,x,y;
        while(~scanf("%d",&n)&&n)
        {
            scanf("%d%d",&a,&b);
            memset(mp,0,sizeof(mp));
            for(i=1; i<=n; i++)
            {
                scanf("%d",&x);
                if(i-x>=1) mp[i][i-x]=1;
                if(x+i<=n) mp[i][x+i]=1;
            }
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                {
                    if(i==j) mp[i][j]=0;
                    else if(mp[i][j]==0) mp[i][j]=inf;
                }
            }
            Dijkstra(a);
            if(a==b) printf("0
    ");
            else if(dist[b]<inf) printf("%d
    ",dist[b]);
            else printf("-1
    ");
        }
        return 0;
    }
    

    版权声明:本文博主原创文章。博客,未经同意不得转载。http://xiang578.top/

  • 相关阅读:
    poj1228 Grandpa's Estate
    poj1113 Wall
    poj2826 An Easy Problem?!
    poj1269 Intersecting Lines
    poj3304 Segments
    BZOJ3832Rally题解
    BZOJ2802Warehouse Store题解
    李超树详解
    BZOJ4241历史研究题解
    洛谷2050 BZOJ2897美食节题解
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4844734.html
Copyright © 2020-2023  润新知