Matlab实现Flyod求最短距离及存储最优路径

一、实际数据

  已知图中所有节点的X、Y坐标。

  图中的节点编号:矩阵中的编号

    J01-J62:1-62;

    F01-F60:63-122;

    Z01-Z06:123-128;

    D01-D02:129-130.

二、Floyd求所有节点间的最小距离及通过矩阵存储最优路径的节点

 function [ optimal,path,maxnum ] = Floyd( distance,liantong,num,p,q )
%Author:ljy
%Date:20170919
%弗洛伊德算法求最优路径和记录下最优路径中的节点信息
%distance为节点间的连通距离。通过已知的节点的X、Y坐标和连通矩阵计算而得。其中Inf为不连通节点间的距离。连通节点间的距离为正数(非Inf),连通情况通过连通(liantong)矩阵判断所得。
%num为所有节点个数
%p和q为不考虑路径的两端节点编号。例如p=[129,129];q=[9,10];表示129到9、129到10的路不连通。
%optimal为最优路径的距离信息
%path为最优路径的路径信息,行和列都为节点编号。path(i,j)为i到j的节点编号。例如:节点1到节点3的最优路径为1-》2-》3,那么path(1,3)=2;path(2,3)=3.
 %maxnum:最长的最优路径的节点总数  %liantong:节点间的连通情况,0为不连通,1为连通。
maxnum = 2; %将distance变为邻接矩阵
for i = 1:num
for j = 1:num
if distance(i,j) == 0 & i ~= j
distance(i,j) = Inf;
end
end
end %将p与q之间的路径的权重赋值为Inf,即不考虑p与q之间这条路径的最优路径。p、q为0表示没有不考虑的路径
for i = 1:size(p)
for j = 1:size(q)
if p(i) > 0 & q(j) > 0
distance(p(i),q(j)) = Inf;
distance(q(j),p(i)) = Inf;
liantong(p(i),q(j)) = 0;
liantong(q(j),p(i)) = 0;
end
end
end %核心算法
for k = 1:num
for i = 1:num
for j = 1:num
r = 2;%最优路径所包含的节点个数
if distance(i,j) > distance(i,k) + distance(k,j)
distance(i,j) = distance(i,k) + distance(k,j);
%存储最优路径中的节点
p = i;
if liantong(p,j) ~= 0
while liantong(i,j) ~= liantong(p,k) & p ~= k
liantong(p,j) = liantong(p,k);
p = liantong(p,k);
r = r + 1;
end
else
liantong(p,j) = liantong(p,k);
r = r + 1;
end
end
if r > maxnum
maxnum = r;
end
end
end
end %返回数据
optimal = distance;
path = liantong;
end
 

『实践』Matlab实现Flyod求最短距离及存储最优路径的更多相关文章

  1. 『实践』Yalmip+Ipopt+Cplex使用手册

    Yalmip+Ipopt+Cplex使用手册 1.软件版本 Cplex 12.6.2,Matlab R2014a,Ipopt 3.12.9,Yalmip 2.Cplex添加方法 官方下载地址: htt ...

  2. 『实践』Yalmip获取对偶函数乘子

    『实践』Yalmip获取对偶函数乘子 一.sdpsetting设置 Yalmip网站给出的说明 savesolveroutput默认为0,需要设置为1才会保存输出结果. 下面是我模型的约束个数: 二. ...

  3. 『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现

    『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现 1.基本设定和软件版本 主机名 ip 对应角色 mas ...

  4. 『实践』Yalmip建模+Cplex类求解

    Yalmip建模+Cplex类求解 一.缘由 Yalmip只能设置部分Cplex的参数,所以需要调用Cplex类.而且optimize是Yalmip提供的常用函数,但此函数的返回结果参数有限. 图1 ...

  5. 『转载』Matlab中fmincon函数获取乘子

    Matlab中fmincon函数获取乘子 一.输出结构 [x,fval,exitflag,output,lambda] = fmincon(......) 二.结构说明 lambda结构 说     ...

  6. 『实践』Android之短信验证码(用的Mob短信验证)

    1.参考资料 Mob网站:http://www.mob.com/ Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android 教程:htt ...

  7. 『实践』Java Web开发之分页(ajax)

    1.需要用到的jar包.js文件 JSONArray().fromObject()需要的jar包: (1)commons-beanutils-1.8.3.jar (2)commons-collecti ...

  8. 『实践』百度地图给map添加右键菜单(判断是否为marker)

      var map; var s;//经度 var w;//纬度 $(document).ready(function(){ $(".mune").load("jsp/c ...

  9. 『实践』百度地图给多个marker添加右键菜单(删除、更新)

    js: $.getJSON("./GetStationPlaceServlet",function(json){ for(var i=0;i<json.length;i++) ...

随机推荐

  1. 简易版AC自动机

    为什么说是简易版? 因为复杂度大概是\(O(M*\overline N)\),而似乎还有另一种大概是\(O(M+\sum N)\)的. 不过据说比赛不会卡前一种做法,因为模式串一般不会很长. 那么步入 ...

  2. c++纯虚函数在父类中调用的规避

    构造和析构函数不允许调用纯虚函数,可以先调用虚函数,里面再调用纯虚函数实现. class Base{public:    virtual void foo()=0;    Base() { call_ ...

  3. EXGCD 扩展欧几里得

    推荐:https://www.zybuluo.com/samzhang/note/541890 扩展欧几里得,就是求出来ax+by=gcd(x,y)的x,y 为什么有解? 根据裴蜀定理,存在u,v使得 ...

  4. winreg模块的使用

    python有内置的注册表操作库--winreg(在33版本中为winreg,在2x版本为_winreg). 1.打开键,枚举键值 # -*- coding: gbk -*- import winre ...

  5. java常用的运算符

    Java 语言中常用的运算符可分为如下几种: Ø 算术运算符 Ø 赋值运算符 Ø 比较运算符 Ø 逻辑运算符 Ø 条件运算符

  6. 事件对象——event

    一.介绍 把一个click时间log出来是这样的: { altKey:false, bubbles:true, button:0, buttons:0, cancelBubble:false, can ...

  7. JavaSE学习总结(三)——Java语言编程练习、格式化字符与常量

    一.变量.常量.字面量 package com.zhangguo.chapter2_3; /** * 1.银行利率为5%,问存款100美元5年的收益细节? * */ public class P1 { ...

  8. js鼠标移入移出效果【原】

    <HTML> <HEAD> <!-- meta 解释 : http://www.haorooms.com/post/html_meta_ds --> <met ...

  9. 多线程ExecutorService中submit和execute区别

    submit和execute都是 ExecutorService 的方法,都是添加线程到线程池中. 区别 三个区别: 1.接收的参数不一样 2.submit有返回值,而execute没有 Method ...

  10. 旅行商问题(TSP)、最长路径问题与哈密尔顿回路之间的联系(归约)

    一,旅行商问题与H回路的联系(H回路 定义为 哈密尔顿回路) 旅行商问题是希望售货员恰好访问每个城市一次,最终回到起始城市所用的费用最低,也即判断图中是否存在一个费用至多为K的回路.(K相当于图中顶点 ...