hahastephanie 2019-10-28 13:48 采纳率: 0%
浏览 918

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;
        }
    }
}

  • 写回答

1条回答 默认 最新

  • 旧时光~ 2019-10-28 14:08
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法