• Dijsktra算法C++实现


    Dijsktra算法解决了有向图G=(V,E)上带权的单源最短路径问题。但要求所有边的权值非负。

    思想:Dijkstra算法中设置了一顶点集合S,从源点s到集合中的顶点的最终最短路径的权值均已确定。算法反复选择具有最短路径估计的顶点u€V-S,并将u加入S中,对u的所有出边进行松弛。

     /*==================================================*
     | Dijkstra 数组实现O (N^2 )
    | Dijkstra --- 数组实现( 在此基础上可直接改为STL 的Queue实现)
     | lowcost[] --- beg 到其他点的最近距离
    | path[] -- beg为根展开的树,记录父亲结点
    *==================================================*/
    #define INF 0x3F3F3F3F;
    const int N=210;
    int path[N],vis[N];
    void Dijkstra(intcost[][N],int lowcost[N],int n,int beg)
    {
        int i,j,min;
        memset(vis,0,sizeof(vis));
        vis[beg]=1;
        for(i=0; i<n; i++)
        {
            lowcost[i]=cost[beg][i];
            path[i]=beg;
        }
        lowcost[beg]=0;
        path[beg]=-1;
        int pre=beg;
        for(i=1; i<n; i++)
        {
            min=INF;
            for(j=0; j<n; j++)
                //下面的加法可能导致溢出,INF不能取太大
                if(vis[j]==0&&lowcost[pre]+cost[pre][j]<lowcost[j])
                {
                    lowcost[j]=lowcost[pre]+cost[pre][j];
                    path[j]=pre;
                }
            for(j=0; j<n; j++)
                if(vis[j]==0&&lowcost[j]<min)
                {
                    min=lowcost[j];
                    pre=j;
                }
            vis[pre]=1;
        }
    }
  • 相关阅读:
    他们在清华的那几年——清华学长语录
    java正则表达非捕获组详解
    VC++ 6.0 快捷键大全
    vs2008的使用
    css的一些基本概念
    VC项目配置基础
    企业该如何规划建设自身的网站
    IT技术人员的薪资到底该如何定?
    高级程序员应该具备什么能力
    软件项目为什么成功率不高
  • 原文地址:https://www.cnblogs.com/panweishadow/p/3396001.html
Copyright © 2020-2023  润新知