目錄
求解所有頂點的最短距離graphallshortestpaths函數
求解特定起始點的最短路徑graphshortestpaths函數
命令名 |
功能 |
graphallshortestpaths |
求圖中所有頂點對之間的最短距離 |
graphconncomp |
找無向圖的連通分支,或有向圖的強弱連通分支 |
graphisdag |
測試有向圖是否含有圈,不含圈返回1,否則返回0 |
graphisomorphism |
確定兩個圖是否同構,同構返回1,否則返回0 |
graphisspantree |
確定一個圖是否是生成樹,是返回1,否則返回0 |
graphmaxflow |
計算有向圖的最大流 |
graphminspantree |
在圖中找最小生成樹 |
graphpred2path |
把前驅頂點序列變成路徑的頂點序列 |
graphshortestpath |
求圖中指定的一對頂點間的最短距離和最短路徑 |
graphtopootder |
執行有向無圈圖的拓撲排序 |
graphtraverse |
求從一頂點出發,所能遍歷圖中的頂點 |
我接下來挑選幾個常用的函數進行講解。
求圖中所有頂點對之間的最短距離 |
① 根據題目構造權值向量;
② 匹配線段的起始點與相應的權值;
③ 調用函數graphallshortestpaths
[dist]=graphallshortestpaths(G) |
[dist]=graphallshortestpaths(G,...’Directed’,DirectedValue,...) |
[dist]=graphallshortestpaths(G,...’Weights’,WeightsValue,...) |
函數參數說明
G參數
G參數是什麼?
G是個稀疏矩陣,我的理解是稀疏矩陣就是含有大量0的矩陣,可能爲了便於存儲和加快計算,才採用這種矩陣。實質上G就相當於以路徑的始末點作爲索引,以路徑權值或者容量爲內容的實數對。
G參數如何生成?
G並不是圖的路徑權值矩陣,它由s[]向量和t[]向量和路徑權值向量w[]構成:G=spares(s,t,w)。也就是說G應該是個N*3的矩陣,第一行表示節點起點,第二行表示節點終點,第三行是權值。
無向圖與有向圖的區別?
由於是不重複的三角矩陣,因此生成的稀疏矩陣代表着有向圖。如果想要生成無向圖,需要這樣操作:UG=tril(G+G');就是把G和自己的轉置G'加起來再求等價變換得到的下三角矩陣。
DirectedValue屬性
屬性 |
作用 |
True |
有向圖(默認) |
False |
無向圖 |
WeightsValue屬性
Weightvalue屬性一般不用指定,函數graphallshortestpath函數默認從稀疏矩陣G中獲取。
Dist輸出參數
輸出[dist]是一個N*N的矩陣,每一個元素代表兩點之間最短距離,對角線上的元素總爲零,不在對角線上的零表示起點和終點的距離爲零,inf值表示沒有路徑。
針對於「有向圖」
構建權值向量&生成網的鄰接矩陣
根據函數調用形式帶入函數
注:當橫縱座標相等時,路徑爲0.
針對於無向圖
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’等算法 |
針對於無向圖
針對於有向圖
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函數的用法」 |
注:稀疏矩陣G中的權值就代表對應路徑所能承載的容量。
這裏K爲2行6列的矩陣,代表着2個最優路徑。
主要是找到一種既不重複又不遺漏的訪問方法,可用來判斷一個圖是否連通。
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表示遍歷方法:默認爲「深度優先遍歷」:
Depthvalue表示遍歷深度值:
表示圖G中指定搜索深度的節點的整數。默認值是Inf(無窮大)。
https://www.cnblogs.com/qzhc/p/10291430.html
https://blog.csdn.net/weixin_42744107/article/details/106875649
圖論工具箱常用函數: