Matlab最短路径问题记录

  利用graphshortestpath 可以求最短路径,具体用法参考MATLAB帮助

S=[1 1 2 2 3 3 4 4 4 4 5 6 6 7 8]; %起始节点向量
E=[2 3 5 4 4 6 5 7 8 6 7 8 9 9 9]; %终止节点向量
W=[1 2 12 6 3 4 4 15 7 2 7 7 15 3 10]; %边权值向量,有向图,G(9,9)=0; 9个节点
G=sparse(S,E,W); %关联矩阵的稀疏矩阵表示
G(9,9)=0;
P=biograph(G,[],'ShowWeights','on');%建立有向图对象P
H=view(P);%显示各个路径权值
[Dist,Path]=graphshortestpath(G,1,9,'Method','Dijkstra') %求节点1到节点9的最短路径
set(H.Nodes(Path),'Color',[1 0.4 0.4]);%以下三条语句用红色修饰最短路径
edges=getedgesbynodeid(H,get(H.Nodes(Path),'ID'));
set(edges,'LineColor',[1 0 0]);
set(edges,'LineWidth',2.0);

  以下是运行结果,节点1到节点9的最短路径为19

Dist =

    19

Path =

     1     3     4     5     7     9

  利用graphallshortestpaths可以求出所有最短路径
  Dists=graphallshortestpaths(G) %求所有最短路径

Dists =

     0     1     2     5     9     6    16    12    19
   Inf     0   Inf     6    10     8    17    13    20
   Inf   Inf     0     3     7     4    14    10    17
   Inf   Inf   Inf     0     4     2    11     7    14
   Inf   Inf   Inf   Inf     0   Inf     7   Inf    10
   Inf   Inf   Inf   Inf   Inf     0   Inf     7    15
   Inf   Inf   Inf   Inf   Inf   Inf     0   Inf     3
   Inf   Inf   Inf   Inf   Inf   Inf   Inf     0    10
   Inf   Inf   Inf   Inf   Inf   Inf   Inf   Inf     0

  注意一点的是创建稀疏矩阵的时候,如果原始是m*3的矩阵a,分别表示起点、终点和权值,有n个点,用sparse(a),创建的还是m*3,这样根本不对,因为矩阵值是第三列,这样的话矩阵值包括了下标。应该是sparse(a(:,1),a(:,2),a(:,3)),这样的话是max(第一列)*max(第二列)的矩阵,然后设置spraseGraph(n,n)=0,这样的话sparseGraph才是方阵,采用调用系统的最短路径函数。

clc
clear all
a = [6 1 1
6 4 1
6 5 1
1 2 1
2 3 1
2 4 1
3 5 1
4 5 1];
res = [];
graph = sparse(a(:,1),a(:,2),a(:,3));
graph(6,6) = 0;
P=biograph(graph,[],'ShowWeights','on');%建立有向图对象P
H=view(P);%显示各个路径权值

  

时间: 2024-09-20 08:14:43

Matlab最短路径问题记录的相关文章

Matlab 进阶学习记录

  最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,活到老,学到老...   1. conf_proposal  =  proposal_config('image_means', model.mean_image, 'feat_stride', model.feat_stride); function conf = proposal_config(varargin) % conf = proposal_config(varargin) % ---------

matlab 相关代码记录

1. 判断是否存在指定的video_name, 若不存在,则在给定save_path下,新建一个video_name文件夹: 1 sec_path = [save_path, video_name, '/']; 2 if ~exist(sec_path,'file') 3 mkdir([save_path, video_name]); 4 end 2. 将gpuArray转换为matlab可以保存的格式,如:uint8 等. if you save the gpuArray data direc

记录我的ubuntu+matlab安装过程

  记录我的ubuntu+matlab安装过程 准备在windows7下用virtual box安装ubuntu,并且在ubuntu上安装matlabR2010b. 从oracle官网下载virtual box,从ubuntu官网下载ubuntu, 从网上下载matlabr2010b, 一路默认安装virtual box和ubuntu. 然后安装virtual box增强功能,和设置共享文件夹 sudo mount -vboxsf shared /mnt/share 挂载matlabr2010b

单源最短路径算法--Dijkstra算法和Bellman-Ford算法

Dijkstra算法 算法流程: (a) 初始化:用起点v到该顶点w的直接边(弧)初始化最短路径,否则设为∞: (b) 从未求得最短路径的终点中选择路径长度最小的终点u:即求得v到u的最短路径: (c) 修改最短路径:计算u的邻接点的最短路径,若(v,-,u)+(u,w)<(v,-,w),则以(v,-,u,w)代替. (d) 重复(b)-(c),直到求得v到其余所有顶点的最短路径. 特点:总是按照从小到大的顺序求得最短路径. 假设一共有N个节点,出发结点为s,需要一个一维数组prev[N]来记录

迷宫路径输出问题-关于迷宫深度最短路径的问题

问题描述 关于迷宫深度最短路径的问题 #include #include #include #include #include #define N 100 using namespace std; struct node { double hgf; int xy; bool operator<(node other)const { return f } }; int map[N][N];//迷宫,1表示可以走,0表示不可以走 int rowcol;//矩阵的行和列 multiset open;/

安装MATLAB

为了使用 MATLAB 桌面,向导,Simulink ,和很完美的图像,你需要安装 Java ,并且在你的路径内可以执行.如果你没有,你必须从终端中运行,这个并不好.最快检测你是否拥有 java 路径的方法是在终端中运行 which java..如果它返回了例如 /usr/local/bin ,那是正常的,否则你需要按照 Java How-To 的说明来配置. 如果有 openGL 渲染的显卡,制作复杂的图形会有更好的性能.打开一个终端,运行命令Template:Grep Driver /etc

Floyd求最短路径算法详解

倘若我们要在计算机上建立一个交通咨询系统则可以采用图的结构来表示实际的交通网络.其实现最基本的功能,求出任意两点间的最短路径, 求最短路径的经典方法有很多种,最常用的便是迪杰斯特拉算法和佛洛依德(Floyd)算法,这篇文章就着重介绍Floyd算法. 求两点之间的最短路径无外乎有两种情况,一种就是从一点直接到另一点,另一种就是从一点经过n个节点后再到另一个节点,比如说要从A到B,则有两种情况就是A直接到B,或者是从A经过N个节点后再到B,所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离

python编写的最短路径算法

 本文给大家分享的是python 无向图最短路径算法:请各位大大指教,继续改进.(修改了中文字符串,使py2exe中文没烦恼),需要的朋友可以参考下     一心想学习算法,很少去真正静下心来去研究,前几天趁着周末去了解了最短路径的资料,用python写了一个最短路径算法.算法是基于带权无向图去寻找两个点之间的最短路径,数据存储用邻接矩阵记录.首先画出一幅无向图如下,标出各个节点之间的权值. 其中对应索引: A --> 0 B--> 1 C--> 2 D-->3 E--> 4

NES文件利用MATLAB可视化

NES是Nintendo Entertainment System的缩写,记录了NES小游戏的所有代码和数据.像超级玛丽.忍者龙剑传.热血格斗.007等游戏都有精彩纷呈的背景图片和形象生动的人物造型,我们是否能提取出这些素材,经过加工,用于其他UI设计呢?今天我们用MATLAB研究下具体内容. NES文件结构分为3大部分:文件头.CPU代码区.PPU数据区.通过文件头可以获得代码区.数据区的大小.这里只需要数据区. 数据区组织为4KB大小的数据块,填充在PPU地址区间0x0000~0x1000(