zoukankan      html  css  js  c++  java
  • HDU 2066 一个人的旅行

    HDU_2066

        直接用队列优化的Bellman-Ford算法求到各个点的最短路,然后再找到各个想去的地方的最短路的最小值即可。

    #include<stdio.h>
    #include<string.h>
    int q[1010],inq[1010];
    int G[1010][1010],d[1010];
    int main()
    {
    int i,j,k,u,v,t,T,S,D,n,ans,front,rear;
    while(scanf("%d%d%d",&T,&S,&D)==3)
    {
    memset(G,0,sizeof(G));
    n=0;
    for(i=0;i<T;i++)
    {
    scanf("%d%d%d",&u,&v,&t);
    if(!G[u][v]||t<G[u][v])
    G[u][v]=G[v][u]=t;
    if(u+1>n)
    n=u+1;
    if(v+1>n)
    n=v+1;
    }
    for(i=0;i<n;i++)
    d[i]=1000000000;
    front=rear=0;
    memset(inq,0,sizeof(inq));
    for(i=0;i<S;i++)
    {
    scanf("%d",&u);
    d[u]=0;
    q[rear++]=u;
    inq[u]=1;
    }
    while(front!=rear)
    {
    u=q[front++];
    inq[u]=0;
    if(front>n)
    front=0;
    for(v=0;v<n;v++)
    if(G[u][v]&&d[u]+G[u][v]<d[v])
    {
    d[v]=d[u]+G[u][v];
    if(!inq[v])
    {
    q[rear++]=v;
    inq[v]=1;
    if(rear>n)
    rear=0;
    }
    }
    }
    ans=1000000000;
    for(i=0;i<D;i++)
    {
    scanf("%d",&t);
    if(d[t]<ans)
    ans=d[t];
    }
    printf("%d\n",ans);
    }
    return 0;
    }


  • 相关阅读:
    第十三周课程总结
    第十二周课程总结
    第十一周课程总结
    C语言||作业01
    C语言寒假大作战03
    C语言寒假大作战4
    C语言寒假大作战02
    C语言寒假大作战01
    C语言I作业12—学期总结
    第一周作业
  • 原文地址:https://www.cnblogs.com/staginner/p/2186592.html
Copyright © 2011-2022 走看看