HDU 1874 畅通工程续

来源:互联网 发布:云计算四种部署模式 编辑:程序博客网 时间:2024/06/05 15:35

思路:dijkstra算法的一种变形   直接套用模板  想了解更多的可以去看我的另外一篇文章! 需要注意的是本题有个难点  是出现重边的时候,在实际应用时(如果是同样好走的路)当然是选取最小的那条路走了==

AC代码:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define INF 0x3f3f3f3int map[212][212],dis[212],visited[212];int n,m;void Dijkstra(int x){        int i,p,j,min;        for (i=0;i<n;i++)        {            dis[i]=map[x][i];            visited[i]=0;        }        dis[x]=0;        visited[x]=1;        for (i=0;i<n;i++)        {            min=INF;            for (j=0;j<n;j++)            {                if(!visited[j] && dis[j]<min)                {                    p=j;                    min=dis[j];                }            }            visited[p]=1;            for (j=0;j<n;j++)            {                if(!visited[j] && dis[p]+map[p][j]<dis[j])                {                        dis[j]=dis[p]+map[p][j];                }            }        }}int main(){        int i,j,a,b,t,s,e;        while(scanf("%d%d",&n,&m)!=EOF)        {            for (i=0;i<n;i++)                for (j=0;j<n;j++)                {                    map[i][j]=INF;                }            for(i=1;i<=m;i++)            {                scanf("%d%d%d",&a,&b,&t);                if(t<map[a][b])                    map[a][b]=map[b][a]=t;            }            scanf("%d %d",&s,&e);            Dijkstra(s);            if(dis[e]==INF)                printf("-1\n");            else                printf("%d\n",dis[e]);        }        return 0;}



0 0
原创粉丝点击