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

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

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

  1. Dist =
  2.  
  3. 19
  4.  
  5. Path =
  6.  
  7. 1 3 4 5 7 9

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

  1. Dists =
  2.  
  3. 0 1 2 5 9 6 16 12 19
  4. Inf 0 Inf 6 10 8 17 13 20
  5. Inf Inf 0 3 7 4 14 10 17
  6. Inf Inf Inf 0 4 2 11 7 14
  7. Inf Inf Inf Inf 0 Inf 7 Inf 10
  8. Inf Inf Inf Inf Inf 0 Inf 7 15
  9. Inf Inf Inf Inf Inf Inf 0 Inf 3
  10. Inf Inf Inf Inf Inf Inf Inf 0 10
  11. 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才是方阵,采用调用系统的最短路径函数。

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

  

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

  1. Matlab 进阶学习记录

    最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal  =  proposal_config('image_means', ...

  2. [POJ 3984] 迷宫问题(BFS最短路径的记录和打印问题)

    题目链接:http://poj.org/problem?id=3984 宽度优先搜索最短路径的记录和打印问题 #include<iostream> #include<queue> ...

  3. matlab 相关代码记录

    1. 判断是否存在指定的video_name, 若不存在,则在给定save_path下,新建一个video_name文件夹: 1 sec_path = [save_path, video_name, ...

  4. MATLAB常用指令记录

    help + 'command name' % 查询指令用法 Ctrl + Break % 强制终止程序运行 Shift + Enter % command window下换行不运行指令 M'; % ...

  5. 【matlab】随意记录

    v = -0.5:0.05:0.5; [x, y] = meshgrid(v); z = sqrt(1.0 - x.^2 - y.^2); mesh(x,y,z); 画一个球的一部分: 2. 求cel ...

  6. 【MATLAB】学习记录2-数组与向量

    1-数组 A=[1,2,3;4,5,6]%创建数组 [r,c]=size(A)%返回行列数 b=size(A) c=length(A)%返回最大的维数值 2-创建数组 先创建A数组 B=zeros(2 ...

  7. 【Matlab】学习记录1-简单的函数介绍

    sind(30) %正弦函数,以角度为单位  ans =0.5000 exp(2) %以e为底的指数函数,即e^x   ans =7.3891 log10(10)  ans =1log(exp(1)) ...

  8. 数据结构--图 的JAVA实现(上)

    1,摘要: 本系列文章主要学习如何使用JAVA语言以邻接表的方式实现了数据结构---图(Graph),这是第一篇文章,学习如何用JAVA来表示图的顶点.从数据的表示方法来说,有二种表示图的方式:一种是 ...

  9. HAOI 2005 路由选择问题 (最短路+次短路)

    问题描述 X城有一个含有N个节点的通信网络,在通信中,我们往往关心信息从一个节点I传输到节点J的最短路径.遗憾的是,由于种种原因,线路中总有一些节点会出故障,因此在传输中要避开故障节点. 任务一:在己 ...

随机推荐

  1. Unity脚本生命周期

    前言 说到生命周期,影响最深刻的是,在接触Java的JSF组件时,JSF组件的五大生命周期,全要默写出来,嘿嘿…… 总结这两天在写小怪和掉落的糖葫芦时,老是遇到GameObject未销毁,一直存在场景 ...

  2. 梳理git分支管理策略

    如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非Git莫属. 相比同类软件, ...

  3. ASP.NET MVC+WCF+NHibernate+Autofac 框架组合(一)

    学习了Spring.NET+NHibernate的框架,觉得Spring.NET框架不够轻量,配置来配置去的比较头疼,所以把Spring.NET换成了Autofac框架,同时加入WCF框架整了一个组合 ...

  4. StaticFileMiddleware中间件如何处理针对文件请求

    StaticFileMiddleware中间件如何处理针对文件请求 我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的 ...

  5. rsyslog 日志统一搜集&message格式

        日志格式修改: http://jiechao2012.blog.51cto.com/3251753/1143762 http://yulei7633.blog.51cto.com/149275 ...

  6. android Camera 如何判断当前使用的摄像头是前置还是后置

    现在 android 平台的智能手机一般都标配有两颗摄像头.在 Camera 中都存在摄像头切换的功能. 并且有一些功能前后置摄像头上会有所不同.譬如人脸检测,人脸识别,自动对焦,闪光灯等功能, 如果 ...

  7. 一个因为粗心的Bug

    /** * 数据绑定,分页显示 */ private void updataMenu(final EditText search) { if(listwz==null) { return; } pag ...

  8. Linux常用指令---kill | killall(终止进程)

    kill Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后 ...

  9. File类和RandomAccessFile类

    目录 File类     File类常用操作     (1)创建文件     (2)删除文件     (3)创建文件夹     (4)列出指定目录全部文件     (5)删除目录 RandomAcce ...

  10. pythonchallenge(三)

    PythonChallenge_3 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux ...