目录

  • 图的简介
  • 无向图(Graph)
    • 生成带权邻接矩阵
    • 求两点最短路径
  • 有向图(Digraph)
    • 生成带权邻接矩阵
    • 求最短路径

图的简介

图是拓扑学中的一个重要概念,分为无向图和有向图两种。图有两个重要属性,即点(Node)和边(Edge)。在图的概念中,我们只关心点和边的连接关系而并不关系他们在图中的相对位置。
由点和边连接的图中,将边赋予一定的权重,就可以将图转换为各种问题,例如TSP(旅行商)问题、(Shortest Path)最短路径问题。本文先介绍如何借助图以及赋予的边的权值生成带权邻接矩阵,再介绍利用图求两点之间最短路径的求法。

无向图(Graph)

生成带权邻接矩阵

先介绍根据以下无向图生成带权邻接矩阵的方法:

假设我们已经知道了每条边的权重(红色标定),该图中有11个点,如果挨个写出需要121个元素,对于此图已经非常繁琐。因此我给大家提供一种简单的方法,只需要写出图中标定权值的边即可达到目的。书写规则如下:
A→A:标定权值是0
若A→B没有路径可以到达,标定权值为0
若A→C有路径可以到达,根据建模需要标定权值
这样,我们在手动书写时,仅需要写出非0边的权重即可,每条边只需要书写一次,书写方式如下:

W=zeros(11);
W(1,2)=2;
W(1,4)=1;
W(1,3)=8;
W(2,3)=6;
W(2,5)=1;
W(3,4)=7;
W(3,5)=5;
W(3,6)=1;
W(3,7)=2;
W(4,7)=9;
W(5,6)=3;
W(5,8)=2;
W(5,9)=9;
W(6,7)=4;
W(6,9)=6;
W(7,9)=3;
W(7,10)=1;
W(8,9)=7;
W(8,11)=8;
W(9,10)=1;
W(9,11)=2;
W(10,11)=4;

由于本例中为无向图,因此生成的矩阵总满足W(i,j)=W(j,i),所以利用以下代码书写另一半:

n=size(W,1);
for i=1:nfor j=i:nW(j,i)=W(i,j);%次对角线分隔的下三角部分根据上三角部分对称end
end
G=graph(W,'upper');%根据带权邻接矩阵生成无向图
plot(G,'EdgeLabel',G.Edges.Weight)
title('标定权重的无向图')

自动绘图效果如下:

带权邻接矩阵W如下:

(如果要将平时我们认为的不能到达的路径之间权重设定为Inf也很容易,不过在Matlab内置的函数shortestpath中,认为权重0即不设路径)

求两点最短路径

格式:[path,distance]=shortestpath(G,1,6)
path返回的是路径经过的点,distance是该路径的长度

例如在工作区输入:

>>[path,distance]=shortestpath(G,1,6)

显示如下:

对照我们绘制的无向图也很容易手动验证,最短路径即1→2→5→6,最短路径的距离=2+1+3=6。

有向图(Digraph)

生成带权邻接矩阵

有向图示例如下:

创建一个数组,每一列依次保存起始点,出发点,以及带权。按照和无向图同样的方法对每条边书写带权:

W=[1 2 10;1 4 10;1 8 1;2 3 10;2 7 1;3 4 10;3 6 1;4 5 1;5 6 12;5 8 12;6 7 12;7 8 12;];

用类似的方法生成有向图如下:

startpoints=W(:,1);%起始点集合
endpoints=W(:,2);%结束点集合
weights=W(:,3);%对应起始点和结束点的边权重
G=digraph(startpoints,endpoints,weights);%生成有向图
plot(G,'EdgeLabel',weights,'layout','force','Edgecolor','red')%画出有向图

效果如下:

求最短路径

在工作区求取最短路径格式如下:

格式:>> [path,distance]=shortestpath(G,s,t)

得到的结果如下:

在此需要说明的和无向图的区别是,在这里我们只有起始点的点数比终点点数小才有路径,否则没有,因此如果按照如下条件调用,则会得到空集,利用这一个特点可以在程序中增加条件加以排除。
(if distance==Inf 或 if path==[])

>> [path,distance]=shortestpath(G,8,2)


希望本文对您有帮助,谢谢阅读

【Matlab】根据图生成带权邻接矩阵,并求出最短路径相关推荐

  1. 在Matlab中构建最大带权生成树

    题目:在Matlab中构建最大带权生成树 学过数据结构的都知道"最小生成树" (Minimum Spanning Tree),可以使用Prim和Kruskal算法找到完全图的最小生 ...

  2. C++ 实现带权有向图的单源点最短路径Dijkstra算法(完整代码)

    首先,引进一个辅助向量D,它的每个分量D[i]表示当前所找到的从始点v0到每个终点vi的最短路径的长度. 它的初态为:若从v0到vi有弧,则D[i]为弧上的权值:否则,置D[i]为∞. 显然,长度为 ...

  3. 【JFreeChart】自定义蜘蛛网图生成带刻度三角雷达图 自定义文字风格 背景色

    工作中需要生成PDF 且包含图表.iText 或其他 可以访问网页地址转PDF.但是效果不是特别理想.故用iText代码方式实现生成PDF.奈何图表又是一个问题(还是个三角形的雷达图).Java端生成 ...

  4. 一个图的带权邻接表存储结构的应用

    情景:在一个图中,已知经过的一串n节点信息,希望显示经过的路径. 数据组织: 点要素:存放图中的点信息,必含Id字段 线要素:存放编辑好的路径信息,必含"Start"和" ...

  5. 二分图大讲堂——彻底搞定最大匹配数(最小覆盖数)、最大独立数、最小路径覆盖、带权最优匹配

    二分图匹配 二分图大讲堂--彻底搞定最大匹配数(最小覆盖数).最大独立数.最小路径覆盖.带权最优匹配(转) 文本内容框架: §1图论点.边集和二分图的相关概念和性质 §2二分图最大匹配求解 匈牙利算法 ...

  6. Java数据结构与算法:无向图,有向图,带权图,图的遍历,最小生成树

    文章目录 无向图 有向图 带权图 图的遍历 广度优先遍历 深度优先遍历 最小生成树 无向图 前面了解到树是有单一根结点的非线性结构,图(graph)也是一种非线性结构,其中的结点可以与许多其他的结点相 ...

  7. 邻接矩阵中啥时候写0和无穷_带权有向图的邻接矩阵中0和无穷大

    信息举报 时间:2020-12-23 本页为您甄选多篇描写带权有向图的邻接矩阵中0和无穷大,带权有向图的邻接矩阵中0和无穷大精选,带权有向图的邻接矩阵中0和无穷大大全,有议论,叙事 ,想象等形式.文章 ...

  8. 网状结构(图)图的存储(邻接矩阵、邻接表)、图的遍历(深度DFS、广度BFS)、图的最短路径

    图 多对多关系 是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系的集合组成 其定义 Graph = (V, E) V={x | x ∈某个数据对象} E = {<u, v> ...

  9. 邮局选址问题-带权中位数

    一.运行环境: Win7.MyEclipse.JDK8 二.运行过程说明: 数据文件格式:第一行是居民数量n的取值,第2~n+1行是每家的位置及权重. 输入格式:输入测试数据集文件编号,范围:1~6. ...

最新文章

  1. php中getdistance函数_php计算两个经纬度地点之间的距离
  2. R语言临床预测模型的评价指标与验证指标实战:自定义的综合判别改善指标(Integrated Discrimination Improvement, IDI)函数
  3. Android 友盟分享躺过的几个坑,大坑,坑爹啊
  4. boost::first_scalar的测试程序
  5. [Java] 蓝桥杯ADV-205 算法提高 拿糖果
  6. unity透明通道加颜色_关于Unity伽马校正的一点笔记
  7. linux安装i3wm桌面环境,ArchLinux + i3wm 桌面 Windows10 双系统安装(重点记录)
  8. ffmpeg使用说明书
  9. 利用gflags自定义标志的使用方法
  10. vue element web 表单设计工具
  11. 车架号VIN码识别,合格证,购车发票,房产证,车牌,驾驶证,行驶证,征信报告等等识别 从易鑫、大搜车、淘车网,看汽车金融发展新模式...
  12. 一些计算机模拟人脑项目
  13. windows10 配置 VNC server
  14. 嫌赚钱太慢,来炒币啊!
  15. glTexImage2D 函数详解
  16. fopen 参数'rb' 与'rb+'引发的黑色血案
  17. CleanMyMac多功能mac电脑管家清理软件
  18. android studio 下拉菜单,怎么在android studio中使用Spinner实现一个下拉菜单
  19. 联想服务器系统蓝屏,联想电脑蓝屏并提示“STOP:0X0000007B的原因分析和解决方法...
  20. Revit API:View 视图概述

热门文章

  1. MySQL 数据库误删除后的数据恢复操作说明
  2. Poor God Water【矩阵快速幂】
  3. XML文件结构和基本语法
  4. saiku+kettle整合(六)olap操作
  5. Spring定时器的运用
  6. Hive中生成随机唯一标识ID的方法
  7. Hession矩阵与牛顿迭代法
  8. 解决python连接mysql,UTF-8乱码问题
  9. Android之个性化ListView实现
  10. cocos2dx基础篇(2)——Win32移植到Android