数学建模07——最短路径

目录

方法简介

概述

常用算法

简单例题

思路分析

代码实现


方法简介

概述

        单源最短路径:从图中某个顶点出发,到达另一个顶点所经过的边的权重之和最小的一条路径

常用算法

        (1)Dijkstra算法(迪杰斯特拉算法),基于贪心思想

        (2)Floyd算法,求出所有顶点对之间的最短路径,时间复杂度高

简单例题

某企业使用一台设备,每年年初需要决定是购置新的,还是继续使用旧的,购置新的就需要一定的购置费用,使用旧的需要支付逐年增加的维修费用,五年内该设备在每年年初的价格,和使用不同时间(年)的设备需要维修费如下表所示,如何制定设备更新计划,使得总支付费用最少?

思路分析

           从第1年初起,到第5年末,中间有很多选择(每一年是买新的还是用旧的)

           第1年初=源点,第5年末=终点,每年的选择=路径,总支付费用=总路径

构造有向图,共六个顶点(第一年初、第一年末......第五年末),并列出邻接矩阵如下

代码实现

clc,clear;
% 写出邻接矩阵
a = zeros(6);
a(1,[2:6])= [15 20 27 37 54];
a(2,[3:6]) = [15 20 27 37];
a(3,[4:6]) = [16 21 28];
a(4,[5:6]) = [16 21];
a(5,6) = 17;

% cellstr将字符串数组拆为单字符串
% 给每个顶点标注名称
% int2str([1:6]')将整数1到6六个数转化为字符
% strcat把字符串水平串联起来
% strcat('v',int2str([1:6]'))把v和字符1到6拼起来,得到6行的数组,分别有v1,v2等
% int2str将整数矩阵转换为表示整数的字符数组
s = cellstr(strcat('顶点',int2str([1:6]')));
G = digraph(a,s);   % 不加s不影响求解
% plot绘图有很多参数可以设置,使图尽量美观
P = plot(G,'layout','force','EdgeColor','k','NodeFontSize',12);

[path,d] = shortestpath(G,1,6);

% 在图片P中,设置求得的最短路径path的属性(颜色、粗细等等)
highlight(P,path,"EdgeColor","red",'LineWidth',3.5)

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值