C++实现迪杰斯特拉算法

因为还没有学数据结构内容,但是需要先弄懂迪杰斯特拉算法,有大佬能帮我解释一下具体的每行代码的意思吗?

十分感谢!!

template <class ElemType,class WeightType>
void ShortestPathDij(const AdjListDirNetwork<ElemType,WeightType> &g,int v0,int *path,WeightType *dist)
{
    WeightType minVal,infinity=g.GetInfinity();
    int v,u;
    for(v=0;v<g.GetVexNum();v++)
    {
        dist[v]=g.GetWight(v0,v);
        if (dist[v]==infinity)
            path[v]=-1;
        else path[v]=v0;
        g.SetTag(v,UNVISITED);
    }
    g.SetTag(v0,VISITED);

    for(int i=1;i<g.GetVexNum();i++)
    {
        minVal=infinity;
        u=v0;
        for(v=0;v<g.GetVexNum();v++)
            if(g.GetTag(v)==UNVISITED&&dist[v]<minVal)
        {
            u=v;
            minVal=dist[v];
        }
        g.SetTag(u,VISITED);
        for(v=g.FirstAdjVex(u);v!=-1;v=g.NextAdjVex(u,v))
            if(g.GetTag(v)==UNVISITED&&minVal+g.GetWeight(u,v)<dist[v])
        {
            dist[v]=minVal+g.GetWeight(u,v);
            path[v]=u;
        }
    }
}

个人意见,先搞明白Dijkstra算法思想,然后再去看代码实现。
你这样直接从代码去理解,有点本末倒置了。