基础知识(四)Dijkstra算法

写这篇博文是因为我怕一两年内,没碰到这个算法,到时候又把它忘了。因为这个算法是图论中,一个非常重要的算法,经常要用到,为了某一天重新拾起这个算法的时候,能够把下面的代码复制一下,然后改装一下再次快速熟练应用它。这个算法在图形学中的三角网格曲面中,可以说是一个基础算法,目前为止,我至少用过十次。在图像中,我也遇到过好几次,比如我写的另一篇博文《基于测地距离的图像分割算法》,这个算法就要与之相结合。

这个算法本身不难,然而对于解释这个算法的流程网上说的乱七八糟的,很多都是c语言版的,用c语言写这个算法,如果没有用结构体,那代码写了起来很乱,每个顶点有好几个相关的变量。下面直接贴一些自己写的代码,以备以后使用:

一、算法大体流程

输入:图、源点seed

输出、图上每个点到源点的 最短距离

Algorithm:

begin

1、初始化所有的点到源点的距离为无穷大

2、把seed到源点的距离置为0

3、把seed加入队列Queue

4、当Queue不为空的时候 循环

{

(1)从队列中选择距离源点最短的顶点Pmin,并从队列中删除

(2)遍历Pmin的邻接顶点q,更新未被冻结的邻接顶点测地距离,即:

    如果,邻接顶点q当前测地距离d(q)<d(Pmin)+E(q,Pmin),其中E(q,Pmin)表示Pmin与q点的连接边的长度,那么:

      {

          更新d;

          更新q的前一个路径点为Pmin

      }

(3)往队列里插入Pmin未被访问过的邻接顶点q

}

end

二、算法代码实现

主要程序:


相关头文件:


本文地址:http://blog.csdn.net/hjimce/article/details/45751503     作者:hjimce     联系qq:1393852684   更多资源请关注我的博客:http://blog.csdn.net/hjimce                原创文章,转载请保留本行信息。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值