C++实现一个简单的Dijstra算法

Posted Jing Sir

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++实现一个简单的Dijstra算法相关的知识,希望对你有一定的参考价值。

如下所示,这是一个简单的迪杰斯特拉:

void Dijstra(Graph<EdgeType> &G,int s,EdgeType D[],int Path[])
{
    int n=G.VerticesNum();
    int i,j;
    for(i=0;i<n;i++)
    {
        G.Mark[i]=UNVISITED;
        D[i]=INFINITY;
        Path[i]=-1;  //标记此时不存在s到i的路径
    }
    G.Mark[s]=VISITED;
    D[s]=0;
    Path[s]=s;
    for(i=0;i<n;i++)
    {
        //找到一条最短特殊路径,即min{D[j]|G.Mark[j]==UNVISITED,0<=j<n}
        EdgeType min=D[0];
        int k=0;
        for(j=1;j<n;j++)
        {
            if(G.Mark[j]==UNVISITED&&min>D[j])
            {
                min=D[j];
                k=j;
            }
        }
        //已经确定s到k的最短路径
        G.Mark[k]=VISITED;
        //利用k更新到其余未访问顶点的最短特殊路径
        for(Edge<EdgeType> e=G.FirstEdge(k);G.IsEdge(e);e=G.NextEdge(e))
        {
            int endVertex=e.end;
            if(G.Mark[endVertex]==UNVISITED&&D[endVertex]>(D[k]+e.weight))
            {
                //更新到endVertex的最短特殊路径
                D[endVertex]=D[k]+e.weight;
                Path[endVertex]=k;
            }
        }
    }
}

 

以上是关于C++实现一个简单的Dijstra算法的主要内容,如果未能解决你的问题,请参考以下文章

Matlab:数模04-图论模型(dijstra算法)

图论模型--dijstra算法和floyd算法

图论中的重要算法(Dijstra,Bellman-Ford,Floyd,Ford-Fulkerson,匈牙利算法)的详细解读及实现

Dijkstra算法求最短路径 C++实现

图--06---加权有向图最短路径Dijstra算法

详细实例说明+典型案例实现 对动态规划法进行全面分析 | C++