Dijkstra——有向图最小距离算法(matlab)

在网上搜索了关于Dijkstra算法的matlab程序,发现流传较多的是:

https://blog.csdn.net/u013414501/article/details/50506907

观察程序发现这个程序仅仅适用于无向图,程序的第八行a=a+a',会在有向图时产生错误,删除后仍然不能很好的适应有向图;

所以自己动手写了一个,考虑到写的不多,如果有错误,希望留言纠正。

 

1.案例

本文的代码通过这个有向图来运行。例子来源:https://www.jianshu.com/p/2121406db974

2.代码

clc;clear all;
%输入距离矩阵(有向)
n=8;%顶点的个数
m=inf;
a=[0 1 2 9 m m m m
   m 0 m 2 m m m m
   
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MATLAB 中,你可以使用以下代码实现 Dijkstra 算法来求解有向图的最短路径: ```matlab function [distances, path] = Dijkstra(graph, startNode) numNodes = size(graph, 1); distances = inf(1, numNodes); distances(startNode) = 0; visited = false(1, numNodes); path = zeros(1, numNodes); for i = 1:numNodes currentNode = findMinDistance(distances, visited); visited(currentNode) = true; for j = 1:numNodes if ~visited(j) && graph(currentNode, j) > 0 newDistance = distances(currentNode) + graph(currentNode, j); if newDistance < distances(j) distances(j) = newDistance; path(j) = currentNode; end end end end end function minNode = findMinDistance(distances, visited) minDistance = inf; minNode = -1; for i = 1:length(distances) if ~visited(i) && distances(i) < minDistance minDistance = distances(i); minNode = i; end end end ``` 使用这个函数,你需要提供一个邻接矩阵 `graph` 表示有向图的连接关系。如果节点 `i` 和节点 `j` 之间存在一条有向边,那么 `graph(i,j)` 就是这条边的权重。如果不存在这条边,则 `graph(i,j)` 应该为 0 或者一个非正数。 此外,你还需要指定起始节点 `startNode`,它是图中一个有效的节点索引。 函数将返回一个包含从起始节点到每个节点的最短距离的数组 `distances`,以及一个包含最短路径的前一个节点的数组 `path`。路径可以通过反向追踪 `path` 数组来重建。 例如,假设你有一个有向图邻接矩阵 `graph` 和起始节点 `startNode`: ```matlab graph = [ 0 3 0 0 8; 0 0 2 0 0; 0 0 0 7 0; 0 0 0 0 1; 4 0 0 0 0 ]; startNode = 1; ``` 你可以调用 Dijkstra 算法并获取最短路径及其距离: ```matlab [distances, path] = Dijkstra(graph, startNode); ``` 现在,`distances` 和 `path` 将包含相应的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值