1. 程式人生 > 其它 >圖論(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

這部分就是簡單的呼叫函式,非常簡單~