MATLAB实现最短路径

目录

一、Dijkstra是什么?

二、算法介绍

1.核心思想

2.具体思路

3MATLAB实现

总结


前言

本人是数学建模在学习的小白,分享一下最近学习的内容也顺便做一下笔记。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Dijkstra是什么?

Dijkstra是解决最短路径的一种算法

最短路径即从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径

二、算法介绍

1.核心思想

广度优先搜索

2.具体思路

1.初始化,即所有的节点都是未访问节点(0),所有的距离都是无穷大(INF),所有的父亲节点都是-1,表示不存在。

2.假设起点(A),然后对应的访问状态变为1,对应的距离变为0,其父亲节点变为本身。

3.开始访问与起点相邻的节点(B)的信息(此时这些节点还没有被访问)

更新规则如下:

如果(A与B的距离加上A列表中的距离)小于(B列表中的距离),那么我们就将B列表中的距离更新为较小的距离,并将其父亲节点更新为A。

4在所有未访问的节点里找到表格里具有最小距离的那个节点,并将其作为新的已访问节点。

3MATLAB实现

s = [9 9 1 1 2 2 2 7 7 6 6 5 5 4];
t = [1 7 7 2 8 3 5 8 6 8 5 3 4 3 ];
w = [4 8 3 8 2 7 4 1 6 6 2 14 10 9];%权重
G = graph(s,t,w);
plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',2);
[P,D] = shortestpath(G,9,4);
%%高亮显示路径
myplot = plot(G,'EdgeLabel',G.Edges.Weight,'LineWidth',2);
highlight(myplot,P,'EdgeColor','r');

结果:


三、总结

这既是今天学习的内容。

——更新于2021.8.31

  • 11
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
贪心算法是一种常见的解决最优化问题的算法,其中最短路径问题就是其中一种。在MATLAB中,可以通过以下步骤实现贪心算法最短路径问题: 1. 定义图结构。在MATLAB中可以使用graph函数定义有向图或无向图。 2. 定义起点和终点。根据实际情况,指定起点和终点。 3. 编写贪心算法。贪心算法最短路径问题的核心在于每次选择当前距离起点最近的未访问节点作为下一个节点,直到到达终点或所有节点都被访问。 4. 输出结果。输出路径和路径长度。 以下是一个简单的MATLAB代码示例: ``` % 定义有向图 G = digraph([1 1 2 2 2 3 3 4], [2 3 4 5 6 6 7 5], [1 3 2 5 4 3 6 4]); % 定义起点和终点 startNode = 1; endNode = 7; % 初始化距离和访问状态 distances = Inf(1, numnodes(G)); visited = false(1, numnodes(G)); % 起点距离为0 distances(startNode) = 0; % 计算最短路径 for i = 1:numnodes(G) % 找到当前距离起点最近的未访问节点 [~, currentNode] = min(distances(~visited)); if currentNode == endNode break; end % 更新距离和访问状态 visited(currentNode) = true; neighbors = G.neighbors(currentNode); for j = 1:length(neighbors) if ~visited(neighbors(j)) distances(neighbors(j)) = min(distances(neighbors(j)), distances(currentNode) + G.Edges.Weight(findedge(G, currentNode, neighbors(j)))); end end end % 输出结果 if isinf(distances(endNode)) disp('无法到达终点!'); else path = shortestpath(G, startNode, endNode); pathLength = distances(endNode); disp(['最短路径为:', num2str(path)]); disp(['路径长度为:', num2str(pathLength)]); end ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值