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 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!