『实践』Matlab实现Flyod求最短距离及存储最优路径
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求最短距离及存储最优路径的更多相关文章
- 『实践』Yalmip+Ipopt+Cplex使用手册
Yalmip+Ipopt+Cplex使用手册 1.软件版本 Cplex 12.6.2,Matlab R2014a,Ipopt 3.12.9,Yalmip 2.Cplex添加方法 官方下载地址: htt ...
- 『实践』Yalmip获取对偶函数乘子
『实践』Yalmip获取对偶函数乘子 一.sdpsetting设置 Yalmip网站给出的说明 savesolveroutput默认为0,需要设置为1才会保存输出结果. 下面是我模型的约束个数: 二. ...
- 『实践』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 ...
- 『实践』Yalmip建模+Cplex类求解
Yalmip建模+Cplex类求解 一.缘由 Yalmip只能设置部分Cplex的参数,所以需要调用Cplex类.而且optimize是Yalmip提供的常用函数,但此函数的返回结果参数有限. 图1 ...
- 『转载』Matlab中fmincon函数获取乘子
Matlab中fmincon函数获取乘子 一.输出结构 [x,fval,exitflag,output,lambda] = fmincon(......) 二.结构说明 lambda结构 说 ...
- 『实践』Android之短信验证码(用的Mob短信验证)
1.参考资料 Mob网站:http://www.mob.com/ Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android 教程:htt ...
- 『实践』Java Web开发之分页(ajax)
1.需要用到的jar包.js文件 JSONArray().fromObject()需要的jar包: (1)commons-beanutils-1.8.3.jar (2)commons-collecti ...
- 『实践』百度地图给map添加右键菜单(判断是否为marker)
var map; var s;//经度 var w;//纬度 $(document).ready(function(){ $(".mune").load("jsp/c ...
- 『实践』百度地图给多个marker添加右键菜单(删除、更新)
js: $.getJSON("./GetStationPlaceServlet",function(json){ for(var i=0;i<json.length;i++) ...
随机推荐
- 【转】cJSON 源码分析
cJSON源码分析 简介 由于C语言汇总,没有直接的字典,字符串数组等数据结构,所以要借助结构体定义,处理json. JSON是一种轻量级的数据交换格式.JSON采用完全独立与语言的文本格式,易于人阅 ...
- 洛谷 [HNOI2014]道路堵塞 解题报告
[HNOI2014]道路堵塞 题意 给一个有向图并给出一个这个图的一个\(1\sim n\)最短路,求删去这条最短路上任何一条边后的最短路. 又事SPFA玄学... 有个结论,新的最短路一定是\(1\ ...
- 分别用postman和python做post请求接口功能测试
前几天,在做一个post请求的接口功能测试的时候,发现数据始终无法入库, 认真加仔细检查了请求的url.方式.参数,均没有问题 找到技术确认,原来是需要传json格式数据 在头信息中加上类型,body ...
- LoadRunner回放乱码
乱码的原因和服务器字符集编码相关,默认LR是gbk解码,如果服务器是utf8,那么需要改为utf8解码,这样中文就显示正常了. 通过查看源码,可以知道服务器的编码方式:<meta charset ...
- enumerate()用法
语法: enumerate(sequence,[start=0]) test = [i for i in range(9)] for i in test: print(i) for i,j in en ...
- 51nod1238 最小公倍数之和 V3
又被这神仙题给坑爆了. 神仙题解. 一开始我把lcm变成ij/gcd然后按照常规套路去推,推到最后发现不是miu * Id而是miu · Id......这还搞鬼啊. 正解居然跟这个差不多,先转成求其 ...
- 走进JVM之一 自己编译openjdk源码
想要深入了解JVM,就必须了解其实现机制.了解JVM实现的最好方法便是自己动手编译JDK.好了,让我们开始吧! 1. 准备工作 获取OpenJDK源码 本次编译选择的是OpenJDK7u,官方源码包 ...
- SQL Server sp_executesql介绍和使用
execute相信大家都用的用熟了,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的, 如: ...
- java代码示例(2)
/** * 目的:求各位之和 * @author chenyanlong * 时间:2017/10/14 */ package com.hp.test02; import java.util.Scan ...
- libevent-2.0.so.5 (安装MEMCACHED问题)
今天安装memcache启动服务时出现 error while loading shared libraries: libevent-2.0.so.5: cannot open shared obje ...