1. function Dijkstra(Graph, source):

    2

    3      create vertex set Q

    4

    5      for each vertex v in Graph:             // Initialization

    6          dist[v] ← INFINITY                  // Unknown distance from source to v

    7          prev[v] ← UNDEFINED                 // Previous node in optimal path from source

    8          add v to Q                          // All nodes initially in Q (unvisited nodes)

    9

    10      dist[source] ← 0                        // Distance from source to source

    11

    12      while Q is not empty:

    13          u ← vertex in Q with min dist[u]    // Source node will be selected first

    14          remove u from Q

    15

    16          for each neighbor v of u:           // where v is still in Q.

    17              alt ← dist[u] + length(u, v)

    18              if alt < dist[v]:               // A shorter path to v has been found

    19                  dist[v] ← alt

    20                  prev[v] ← u

    21

    22      return dist[], prev[]

  2.  

    程序运行在matlab 7.0正常,1为出发节点,有向图的结构如下:

  3.  

    这里是我写的matlab程序。

    %初始化

    MAXNUM=5;

    MAXINT=32767;

    dij=MAXINT*ones(MAXNUM,MAXNUM);

    dij(1,2)=10;

    dij(1,4)=30;

    dij(1,5)=100;

    dij(2,3)=50;

    dij(3,5)=10;

    dij(4,3)=20;

    dij(4,5)=60;

    dij(1,1)=0;

    dij(2,2)=0;

    dij(3,3)=0;

    dij(4,4)=0;

    dij(5,5)=0;

    V=1:MAXNUM;%全部节点

    S=[1];%已分配节点

    m=1;%过渡节点

    ite=2;

    U=2:MAXNUM;%未分配的节点

    %重复,直到U为空

    %将U中的节点不断添加到S中,同时记录过渡节点和最短路径

    dist=dij(1,:);%节点1到其它节点的初始距离值,每次迭代更新一次

    dist1=dist;

    while(length(U)>0)

    dist1(dist1==min(dist1))=[]; %已分配的节点对应的距离从dist1中删除

    m=find(dist==min(dist1));%记录dist1当前的最小值在dist中的下标

    S(ite)=m;%将过渡节点加入S

    U(find(U==m))=[];%将过渡节点从U中删除

    %比较1经过m与不经过m到未分配节点的距离,dist中的距离更新为较小者

    for u=1:length(U)

    if(dist(m)+dij(m,U(u))<dist(U(u)))

    dist1(find(dist1==dist(U(u))))=dist(m)+dij(m,U(u));%dist1中的值同步更新

    dist(U(u))=dist(m)+dij(m,U(u));

    end

    end

    ite=ite+1;

    end

    %保存到每个节点的最短路径,每行对应每个节点的路径和最短距离,其实就是将S逆序输出

    path(1,1)=1;

    for node=2:MAXNUM

    location=find(S==node);

    path(node,1)=node;

    i=2;

    for s=location:-1:2

    if(dij(S(s-1),S(s))~=MAXINT)

    path(node,i)=S(s-1);

    i=i+1;

    end

    end

    path(node,i)=dist(node);

    end

    %TODO:程序中用到了find()方法,这是一个bug,find可能会返回不止一个值,取其中任意一个就行。

    参考----http://www.wutianqi.com/?p=1890

    或者

    https://blog.csdn.net/cxllyg/article/details/7604812

最短路径算法dijkstra的matlab实现的更多相关文章

  1. 最短路径算法Dijkstra和A*

    在设计基于地图的游戏,特别是isometric斜45度视角游戏时,几乎必须要用到最短路径算法.Dijkstra算法是寻找当前最优路径(距离原点最近),如果遇到更短的路径,则修改路径(边松弛). Ast ...

  2. 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)

    一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...

  3. 有向有权图的最短路径算法--Dijkstra算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  4. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  5. 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson

    根据DSqiu的blog整理出来 :http://dsqiu.iteye.com/blog/1689163 PS:模板是自己写的,如有错误欢迎指出~ 本文内容框架: §1 Dijkstra算法 §2 ...

  6. 最短路径算法——Dijkstra算法

    在路由选择算法中都要用到求最短路径算法.最出名的求最短路径算法有两个,即Bellman-Ford算法和Dijkstra算法.这两种算法的思路不同,但得出的结果是相同的. 下面只介绍Dijkstra算法 ...

  7. 最短路径算法——Dijkstra算法与Floyd算法

    转自:https://www.cnblogs.com/smile233/p/8303673.html 最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1    ADE:2  ...

  8. 最短路径算法-Dijkstra

    Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...

  9. 单源最短路径算法---Dijkstra

    Dijkstra算法树解决有向图G=(V,E)上带权的单源最短路径问题,但是要求所有边的权值非负. 解题思路: V表示有向图的所有顶点集合,S表示那么一些顶点结合,从源点s到该集合中的顶点的最终最短路 ...

随机推荐

  1. [Hadoop异常处理] Namenode和Datanode都正常启动,但是web页面不显示

    异常 namenode和data都正常启动 但是web页面却不显示,都为零 解决办法一: 在hdfs-site.xml配置文件中,加入 <property> <name>dfs ...

  2. 【原】继承AbstractRoutingDataSource再通过AOP实现动态数据源切换

    关于AbstractRoutingDataSource动态切换数据源是我在研究某开源项目时候才注意到的,大概就看懂了Spring AOP切面这里,根据作者的意思是通过继承这个抽象类可以实现数据源的动态 ...

  3. 微信小程序开发BUG经验总结

    摘要: 常见的微信小程序BUG! 小程序开发越来越热,开发中遇到各种各样的bug,在此总结了一些比较容易掉进去的坑分享给大家. 1. new Date跨平台兼容性问题 在Andriod使用new Da ...

  4. Python全栈学习_day009知识点

    今日大纲: . 函数的初识 . 函数的返回值 . 函数的参数 1. 函数的初识 统计字符串s的总个数(不能用len) s='fkahfkahofijalkfkadhfkjadhf' count = f ...

  5. 小程序和PHP学习笔记 ----- 不定期更新。

    学习tp5和小程序过程需要记住的重点记录 1,box-sizing: border-box; 规定两个并排的带边框的框 border-box 为元素设定的宽度和高度决定了元素的边框盒. 就是说,为元素 ...

  6. 基础篇|一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  7. .NET代码设计简单规范

    以下转载于:http://www.it28.cn/ASPNET/825095.html 下面这个规范是我为朋友写的几点建议,写的很范,作为BLOG,愿与大家一起分享.只给出部分设计规范样例,关于.NE ...

  8. Fit项目图片上传和云存储的调通

    项目中关于动作的说明需要相应的配图,这样可以更直观的说明动作要点.本篇主要为项目中动作的新增和编辑做准备,确定适合场景的上传操作逻辑以及图片的存储和加载的方法. 一 上传方案 a) 本来所用的模板中是 ...

  9. 遇到npm报错read ECONNRESET怎么办

    遇到npm 像弱智一样报错怎么办 read ECONNRESET This is most likely not a problem with npm itselft 'proxy' config i ...

  10. SQL Server 2012 读写分离设置 - AlsoIn

    原文转至:http://www.tuicool.com/articles/a6rmiam/ 引用: http://technet.microsoft.com/zh-cn/library/jj16176 ...