当前位置: 首页 > news >正文

数学建模常用的代码

Dijkstra算法找最短路径代码

算法的核心就是从原点出发(原点可以是自己定义的任意一个点),以原点为圆心,半径从小到大,判断原点到半径上面的点的最短距离,这个距离可能是圆心r0->r1(半径较小)->r2(半径较大)或者是r0->r2(如果存在r0到r2这条路径的话)

例子:

某公司在六个城市c1, c2,,,, c6 中有分公司,从 ci到 cj 的直接航程票价记在 
下述矩阵的 (i, j) 位置上。(∞ 表示无直接航路),请帮助该公司设计一张城市 c1 到其它城市间的票价最便宜的路线图。 

符号含义:用矩阵 a[n,n](n 为顶点个数)存放各边权的邻接矩阵, 行向量 pb 、 index1、 index2 、d 分别用来存放 P 标号信息、标号顶点顺序、标号顶点索引、最短通路的值。
其中分量 index2(i) 存放始点到第i 点最短通路中第i 顶点前一顶点的序号; 
d(i) 存放由始点到第i 点最短通路的值。 
求第一个城市到其它城市的最短路径的 Matlab 程序如下:
(可以直接复制下方代码运行)
其中a(1,2)表示第一个点到第二个点的距离,以此类推,在实际应用中先把所有点直接的距离矩阵写出来,不连通的点用无穷大表示

代码

clc,clear all
a=zeros(6);
a(1,2)=50;a(1,4)=40;a(1,5)=25;a(1,6)=10;               
a(2,3)=15;a(2,4)=20;a(2,6)=25;
a(3,4)=10;a(3,5)=20;
a(4,5)=10;a(4,6)=25;
a(5,6)=55;
a=a+a'                                                  
a(find(a==0))=inf %将a=0的数全部替换为无强大               
pb(1:length(a))=0;pb(1)=1;  %当一个点已经求出到原点的最短距离时,其下标i对应的pb(i)赋1
index1=1; %存放存入S集合的顺序
index2=ones(1,length(a)); %存放始点到第i点最短通路中第i顶点前一顶点的序号
d(1:length(a))=inf;d(1)=0;  %存放由始点到第i点最短通路的值
temp=1;  %temp表示c1,算c1到其它点的最短路。
while sum(pb)<length(a)  %看是否所有的点都标记为P标号
tb=find(pb==0); %找到标号为0的所有点,即找到还没有存入S的点
d(tb)=min(d(tb),d(temp)+a(temp,tb));%计算标号为0的点的最短路,或者是从原点直接到这个点,又或者是原点经过r1,间接到达这个点
tmpb=find(d(tb)==min(d(tb)));  %求d[tb]序列最小值的下标
temp=tb(tmpb(1));%可能有多条路径同时到达最小值,却其中一个,temp也从原点变为下一个点
pb(temp)=1;%找到最小路径的表对应的pb(i)=1
index1=[index1,temp];  %存放存入S集合的顺序
temp2=find(d(index1)==d(temp)-a(temp,index1));
index2(temp)=index1(temp2(1)); %记录标号索引
end
d, index1, index2

相关文章:

  • Jmeter 从登录接口提取cookie 并 跨线程组调用cookie (超详细)
  • 游戏本笔记本更换@添加内存条实操示例@DDR5内存条
  • Linux 基于HAProxy+KeepAlived实现
  • 安防监控视频汇聚平台EasyCVR启用图形验证码之后如何调用login接口?
  • linux入门级学习指南
  • docker-compose(mysql5.6、mysql8、neo4j3.5、redis)
  • Nodejs运行vue项目时,报错:Error: error:0308010C:digital envelope routines::unsupported
  • 自动化测试:Selenium中的时间等待
  • AD学习笔记
  • SPI机制详解
  • 学习JavaEE的日子 Day29 yield,join,线程的中断,守护线程,线程局部变量共享,线程生命周期
  • I.MX6ULL_Linux_系统篇(25) buildroot文件系统构建
  • C++自主点餐系统
  • WordPress Git主题 响应式CMS主题模板
  • python基本数据(如注释)
  • hexo+github搭建个人博客
  • angular2开源库收集
  • Codepen 每日精选(2018-3-25)
  • Druid 在有赞的实践
  • Hexo+码云+git快速搭建免费的静态Blog
  • iOS编译提示和导航提示
  • JavaScript 奇技淫巧
  • js ES6 求数组的交集,并集,还有差集
  • JSONP原理
  • Linux快速复制或删除大量小文件
  • MySQL QA
  • mysql常用命令汇总
  • opencv python Meanshift 和 Camshift
  • Python语法速览与机器学习开发环境搭建
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Vim 折腾记
  • Wamp集成环境 添加PHP的新版本
  • 搭建gitbook 和 访问权限认证
  • 嵌入式文件系统
  • 我感觉这是史上最牛的防sql注入方法类
  • 一个SAP顾问在美国的这些年
  • 找一份好的前端工作,起点很重要
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • #在 README.md 中生成项目目录结构
  • $$$$GB2312-80区位编码表$$$$
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (全注解开发)学习Spring-MVC的第三天
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • **python多态
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net开发时的诡异问题,button的onclick事件无效
  • .net下简单快捷的数值高低位切换