[matlab] 20.圖與網絡 matlab自帶函數使用


matlab自帶的biography(產生一個句柄) 可以用於畫圖

R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始節點編號
C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始節點可連接的節點編號
W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %權重
G=sparse(R,C,W); %產生稀疏矩陣
view(biograph(G,[],'ShowW','ON')); %‘ShowW' ‘ON' 表示顯示權值 ,'ShowArrows' ‘ON’為顯示箭頭。
graphallshortestpaths(G) %返回G的所有最短路徑,以矩陣形式返回
畫圖及最短路

這里面R和C分別表示節點坐標x,y的標量,W表示對應兩節點之間的邊權值。

sparse函數會生成一個m*n的double型矩陣,m是R中最大的數字,n是C中最大的數字。

注意:如果m與n不相等,那么生成的矩陣將不是方陣,而所有的圖論算法操作的矩陣都需要是方陣,所以在R和C和W的最后填補了8 7 0三個數字,來保證生成方陣,同時w=0,加權為0保證不影響結果。

 

 

路徑矩陣 第一行代表第一個節點  第m列代表第一個節點到第m個節點的距離  類似的 第二行第二列代表第二個節點到第二個節點的距離為0 

無向圖

R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始節點編號
C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始節點可連接的節點編號
W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %權重
G=sparse(R,C,W);  %產生稀疏矩陣
view(biograph(G,[],'ShowW','ON','ShowArrows','off')); %‘ShowW' ‘ON' 表示顯示權值 ,'ShowArrows' ‘ON’為顯示箭頭。
graphallshortestpaths(G+G') %無向圖的最短路徑,則將稀疏矩陣與其轉置相加
無向圖的繪制及最短路徑

 

無向圖的距離矩陣

求兩點見最短路徑為[dist path]=graphshortestpath(G,v1,v2)

v1,v2為兩點。返回的dist為路徑長,path為路徑。

舉例    [dist path]=graphshortestpath(G,1,8)

 

R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始節點編號
C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始節點可連接的節點編號
W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %權重z
G=sparse(R,C,W);  %產生稀疏矩陣

graphallshortestpaths(G+G') %無向圖的最短路徑,則將稀疏矩陣與其轉置相加

h=view(biograph(G,[],'showW','on')); %‘ShowW' ‘ON' 表示顯示權值 ,'ShowArrows' ‘ON’為顯示箭頭。
edges=getedgesbynodeid(h,get(h.Nodes(path),'ID')); %獲取邊緣線句柄
set(h.Nodes(path),'color',[1 0 0]) %節點塗色為哄
set(edges,'LineColor',[1 0 0]) %連接線變成紅色
set(edges,'LineWidth',1.5) %連接線加粗
最短路徑上色

 

最小生成樹

R=[1 1 2 4 1 2 3 3 5 7 3 4 5 6 7 8]; % 起始節點編號
C=[2 3 3 3 4 5 5 6 6 6 7 7 8 8 8 7]; % 起始節點可連接的節點編號
W=[2 8 6 7 1 1 5 1 3 4 2 9 8 6 3 0]; %權重z
G=sparse(R,C,W);  %產生稀疏矩陣
G=G+G'; %此處G需為無向圖,即原稀疏矩陣與其轉置之和
[ST,pred] = graphminspantree(G);
view(biograph(ST,[],'ShowArrows','off','ShowWeights','on'))
最小生成樹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM