1 matlab图论工具箱的函数
matlab图论工具箱主要用于求最短路径,最小生成树和最大流。
其常见命令如下表:
函数名 | 功能 |
---|---|
graphallshortestpaths | 求图中所有顶点对之间的最短距离 |
graphconncomp | 找无向图的连通分支,或有向图的强(弱)连通分支 |
graphisdag | 测试有向图是否含有圈,不含圈返回1,否则返回0 |
graphisomorphism | 确定两个图是否同构,同构返回1,否则返回0 |
graphisspantree | 确定一个图是否生成树,是返回1,否则返回0 |
graphmaxflow | 计算有向图的最大流 |
graphminspantree | 在图中找最小生成树 |
graphpred2path | 把前驱顶点序列变成路径的顶点序列 |
graphshortestpath | 求图中指定的一对顶点间的最短距离和最短路径 |
graphtopoorder | 执行有向无圈图的拓扑排序 |
graphtraverse | 求从一顶点出发,所能遍历图中的顶点 |
2 求无向图中任意两点间的最短路径
图片如下:
图中M2_1和M2_2之间的数字2057代表两点之间的距离。matlab中函数graphshortestpath用于求无向图任意两点间的最小距离。根据无向图,需要构造任意相邻两点之间的距离矩阵。
例如:
a(1,2)=2057 ;a(1,3)=2031;
代表点M2_1和点M2_2之间的距离为2057,点M2_1和点M2_3之间的距离为2031
matlab编程实现求图中任意两点之间的距离最小值。
clc;
clear;
close all;
% 计算任意两个之间的最小距离
sum = 0; %保存距离求和
a(1,2)=2057 ;a(1,3)=2031; %点1和点2之间的距离为2057,点1和点3之间的距离为2031
a(2,3)=1967; a(2,5)=1042; a(2,6)=1403;
a(3,4)=821; a(3,5)=1115;
a(4,9)=2281;
a(5,8)=1905;
a(6,7)=1329;
a(7,8)=1666;
a(8,9)=1513;
a = a'; %matlab工具箱要求数据是下三角矩阵
[i,j,v] = find(a);
b = sparse(i,j,v,9,9); %构造稀疏矩阵
[x,y,z] = graphshortestpath(b,1,9,'directed',false); %函数括号内1和9分别代表图中第一和第九个顶点,更改数字即可求任意两点的最小距离,x为计算得到的1和9两点间的最小距离
函数计算结果,x为5133,y为从点1到点9得到的最短距离经过的点,输出为[1 3 4 9]代表经过了第3点和第4点。