图论(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
最小费用最大流问题
问题描述
解决步骤:
- Matlab求出最大流
- Lingo代码解决
具体实现
视频:https://www.bilibili.com/video/BV1sf4y157ZG
这部分就是简单的调用函数,非常简单~
原文地址:https://www.cnblogs.com/Cassiopeia/p/15109050.html
- C语言之函数
- ElasticSearch搜索引擎在SpringBoot中的实践
- 消费者驱动的微服务契约测试套件Spring Cloud Contract
- 使用Spring Boot开发一个Spring Mobile程序
- Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失
- 内网穿透工具-ittun
- Elastic-Job-Spring-Boot-Starter简化你的任务配置
- Spring Boot处理REST API错误的正确姿势
- C语言之位运算
- C语言之预处理命令与用typedef命名已有类型
- spring-data-mongodb之MongoTemplate 删除操作
- 总结了一些指针易出错的常见问题(六)
- spring-data-mongodb之MongoTemplate 修改数据
- spring-data-mongodb之MongoTemplate 添加数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法