zoukankan      html  css  js  c++  java
  • HDU 1874 畅通工程续 dijkstra

    题意就是求S->T的最短路径,需要注意的是,这题会有重复输入的边,

    比如:先输入 1 2 3  又输入 1 2 4,那么1和2之间最短的路径应该是3而不是后面输入的4

    #include <iostream>
    #include <algorithm>
    #define N 220
    #define INF 0x3f3f3f3f
    using namespace std;
    int map[N][N],n,m;
    int dijkstra(int s,int d)
    {
        int i,j,vis[N]= {0},dis[N];
        for(i=0; i<N; i++)
            dis[i]=INF;
        for(i=0; i<n; i++)
            dis[i]=map[s][i];
        vis[s]=1;
        for(i=1; i<n; i++)
        {
            int k=-1,min=INF;
            for(j=0; j<n; j++)
                if(!vis[j]&&dis[j]<min)
                {
                    min=dis[j];
                    k=j;
                }
            if(k==-1)
                continue;
            vis[k]=1;
            for(j=0; j<n; j++)
                if(!vis[j]&&dis[j]>dis[k]+map[k][j])
                    dis[j]=dis[k]+map[k][j];
        }
        if(dis[d]==INF)
            return -1;/*不可达*/
        return dis[d];
    }
    int main()
    {
        int i;
        while(cin>>n>>m)
        {
            for(i=0; i<=n; i++)
                for(int j=0; j<=n; j++)
                {
                    if(i==j)
                        map[i][j]=0;
                    else
                        map[i][j]=INF;
                }
            for(i=0; i<m; i++)
            {
                int x,y,z;
                cin>>x>>y>>z;
                if(map[x][y]!=INF)/*判断是否重复输入*/
                    z=z<map[x][y]?z:map[x][y];
                map[x][y]=map[y][x]=z;
            }
            int s,d;
            cin>>s>>d;
            cout<<dijkstra(s,d)<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Xcode常用
    iOS知识点
    iOS Crash上传
    [crash详解与防护] KVO crash
    iOS常见bug
    PHP实现万年历
    在Vue框架中引入Element
    PHP--随机生成颜色
    PHP读取Excel表格数据
    权限管理功能(一)
  • 原文地址:https://www.cnblogs.com/yu0111/p/5411086.html
Copyright © 2011-2022 走看看