算法分析与实践

  1. 问题
    在有向图 G=(V,E) 使用Dijkstra算法找到由顶点 V0 到其余各点的最短值。
    在这里插入图片描述

  2. 解析
    在这里插入图片描述
    Dis初值为0;
    从a行开始找可行并且距离最近的下一个点为b,Dis=0+1=1;
    找到b之后,从b行开始找可行并且距离最近的下一个点为d,Dis=1+2=3;
    找到d之后再从d行开始找可行并且距离最近的下一个点为f,Dis=3+8=11;
    找到f之后再从f行开始找可行并且距离最近的下一个点为e,Dis=11+2=13;
    找到e之后再从e行开始找可行并且距离最近的下一个点为g,Dis=13+2=15;
    找到g之后再从g行开始找可行并且距离最近的下一个点为h,Dis=15+3=18;
    输出Dis=18;
    结束。

  3. 设计
    [核心伪代码]
    void Dijkstra(int D)
    {
    memset(vis,0,sizeof(vis));
    for(int t=1;t<=n;t++)
    {
    dis[t]=map[D][t];
    }
    vis[D]=1;
    for(int t=1;t<n;t++)
    {
    int minn=Inf,temp;
    for(int i=1;i<=n;i++)
    {
    if(!vis[i]&&dis[i]<minn)
    {
    minn=dis[i];
    temp=i;
    }
    }
    vis[temp]=1;
    for(int i=1;i<=n;i++)
    {
    if(map[temp][i]+dis[temp]<dis[i])
    {
    dis[i]=map[temp][i]+dis[temp];
    }
    }
    }

}
4. 分析
[算法复杂度推导]
5. 源码
[github源码地址]
https://github.com/xujinyuanky/-/tree/master

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值