zoukankan      html  css  js  c++  java
  • Dijkstra算法

    #include <iostream>
    #include <cstring>
    
    #define MAXI 105
    #define INF 0x3f3f3f
    using namespace std;
    
    int a[MAXI][MAXI];    //无向图
    int dist[MAXI];        //到各个点的最短路径
    int n,m;        //顶点数和边数
    int prev[MAXI];        //路径
    
    void Dijkstra(int v0)
    {
        bool s[MAXI];        //顶点集合
        for(int i=1;i<=n;i++)    //初始化
        {
            s[i]=false;
            dist[i]=a[v0][i];
            if(a[v0][i]<INF)
                prev[i]=v0;
            else
                prev[i]=-1;
        }
        dist[v0]=0;
        s[v0]=true;
        for(int i=2;i<=n;i++)
        {
            int u=v0;
            int maxx=INF;
            for(int j=1;j<=n;j++)
                if(!s[j]&&dist[j]<maxx)
                {
                    u=j;
                    maxx=dist[j];
                }
            s[u]=true;
            for(int j=1;j<=n;j++)
            {
                if(!s[j]&&a[u][j]<INF)
                {
                    if(dist[j]>dist[u]+a[u][j])
                    {
                        dist[j]=dist[u]+a[u][j];
                        prev[j]=u;
                    }
                }
            }
        }
    }
    void creat()
    {
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                a[i][j]=INF;
        for(int i=1;i<=n;i++)
            a[i][i]=0;
    }
    
    int main()
    {
        int t;
        int w,u,v;
        cin>>n>>m;
        creat();
        for(int i=0;i<m;i++)
        {
            cin>>u>>v>>w;
            a[u][v]=w;
            a[v][u]=w;
        }
        Dijkstra(1);
        for(int i=1;i<=n;i++)
            cout<<dist[i]<<" ";
        t=7;
        while(t!=1)
        {
            cout<<prev[t]<<"->";
            t=prev[t];
        }
        return 0;
    }
    /*
    7 12
    1 2 7
    1 3 9
    1 6 14
    2 3 10
    2 4 15
    3 4 11
    3 6 2
    4 5 6
    5 6 9
    7 4 7
    7 5 5
    7 6 3
    */
  • 相关阅读:
    I/O多路复用技术
    网络编程的异常及处理
    LINUX的signal
    网络编程小知识
    一个位压缩技巧
    加密技术[翻译]
    暴雪的hash算法[翻译]
    喜欢就好
    【PYTHON】编码是个细致活
    【Python3】POP3协议收邮件
  • 原文地址:https://www.cnblogs.com/asuml/p/6641258.html
Copyright © 2011-2022 走看看