图论(3)--图论工具箱及应用

时间:2021-08-06
本文章向大家介绍图论(3)--图论工具箱及应用,主要包括图论(3)--图论工具箱及应用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Matlab图论工具箱介绍

命令列表

命令名 功能
graphallshortestpaths 求图中所有顶点对之间的最短距离
graphconncomp 找无向图的连通分支,或有向图的强弱连通分支
graphisdag 测试有向图是否含有圈,不含圈返回1,否则返回0
graphisomorphism 确定两个图是否同构,同构返回1,否则返回0
graphisspantree 确定一个图是否是生成树,是返回1,否则返回0
graphmaxflow 计算有向图的最大流
graphminspantree 在图中找最小生成树
graphpred2path 把前驱顶点序列变成路径的顶点序列
graphshortestpath 求图中指定的一对顶点间的最短距离和最短路径
graphtopootder 执行有向无圈图的拓扑排序
graphtraverse 求从一顶点出发,所能遍历图中的顶点

graphallshortestpaths函数

Matlab使用方法

① 根据题目构造权值向量;

② 匹配线段的起始点与相应的权值;

③ 调用函数graphallshortestpaths

函数格式

[dist]=graphallshortestpaths(G)

[dist]=graphallshortestpaths(G,...’Directed’,DirectedValue,...)

[dist]=graphallshortestpaths(G,...’Weights’,WeightsValue,...)

DirectedValue属性
属性 作用
True 有向图(默认)
False 无向图
WeightsValue属性

Weightvalue属性一般不用指定,函数graphallshortestpath函数默认从稀疏矩阵G中获取。

graphshortestpaths函数

函数调用格式

[dist,path]=graphshortestpaths(G,S,T)

[dist,path]=graphshortestpaths(G,S,T’Directed’,DirectedValue,...)

[dist,path]=graphshortestpaths(G,S,T’Weights’,WeightsValue,...)

函数参数说明
G 稀疏矩阵
S 起点
T 终点
Dist 最短距离
path 最短距离经过的路径节点

最小生成树graphminspantree函数

函数调用格式

[Tree,pred]=graphminspantree(G)

[Tree,pred]=graphminspantree(G,R)

[Tree,pred]=graphminspantree(...,’Method’,MethofValue,...)

[Tree,pred]=graphminspantree(...,’Weights’,WeightsValue,...)

参数说明

该函数用来寻找一个无循环的节点集合,连接无向图的全部节点,并且总的权值最小。

Tree 一个代表生成树的稀疏矩阵
Pred 包含最小生成的祖先节点的向量
G 稀疏矩阵
R 根节点,取值为1到节点数目
Method 可以选择‘Kruskal’,’Prim’等算法

图的遍历graphtraverse函数

函数调用格式

[disc,pred,closed]=graphtraverse(G,S)

[...]=graphtraverse(G,S,...’Directed’,DirectedValue,...)

[...]=graphtraverse(G,S,...’Depth’,DepthValue,...)

[...]=graphtraverse(G,S,...’Method’,MethodValue,...)

参数说明
G 有向图的稀疏矩阵
S 起始节点
Disc 节点索引向量
Pred 祖先节点索引向量

Methodvalue表示遍历方法:默认为“深度优先遍历”(DFS和DPS后面会介绍)

返回稀疏矩阵adjacency

函数调用格式
A = adjacency(G)
A = adjacency(G,'weighted')
A = adjacency(G,weights)

A = adjacency(G)返回图 G 的稀疏邻接矩阵。

A = adjacency(G,'weighted') 返回加权邻接矩阵,其中对于每条边 (i,j),值 A(i,j)包含边的权重。

A = adjacency(G,weights)返回加权邻接矩阵,其边权重由向量 weights指定。

具体链接请查看matlab手册:图邻接矩阵 - MATLAB adjacency - MathWorks 中国

利用图论工具箱解决最大流,最小费用最大流问题

最大流问题

问题描述
graphmaxflow函数

注意:该工具箱函数权值必须为正,且两个顶点不能有两条弧。我们可以在权值最小的那条边中间插入新的顶点,再将其依次连接,新边的权值均与原来的权值相等。

函数调用格式

[MaxFlow,FlowMatrix,Cut]=graphmaxflow(G,SNode,TNode)

[...]=graphmaxflow(G,SNode,TNode,...’Capacity’,CapacityValue,...)

[...]=graphmaxflow(G,SNode,TNode,...’Method’,MethodValue,...)

函数参数说明
G N*N的稀疏矩阵
SNode 起点
TNcode 目标点
CapacityValue属性 每条边自定义容量的列向量,默认从G中获取
MethodValue属性 可以取‘Edmonds’和‘Goldberg’算法
输出参数MaxFlow 网络最大流
输出参数FlowMatrix 每条边数据流的值所组成的稀疏矩阵
输出参数cut 连接起点与目标点的逻辑向量,如果有多个解时,Cut是一个矩阵
关于Sparse函数

详见:https://www.cnblogs.com/Demo1589/p/7881762.html

最小费用最大流问题

问题描述
解决步骤:
  1. Matlab求出最大流
  2. Lingo代码解决
具体实现

视频:https://www.bilibili.com/video/BV1sf4y157ZG

这部分就是简单的调用函数,非常简单~


原文地址:https://www.cnblogs.com/Cassiopeia/p/15109050.html