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

matlab自帶的biography(產生一個句柄) 能夠用於畫圖node

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中最大的數字。ide

注意:若是m與n不相等,那麼生成的矩陣將不是方陣,而全部的圖論算法操做的矩陣都須要是方陣,因此在R和C和W的最後填補了8 7 0三個數字,來保證生成方陣,同時w=0,加權爲0保證不影響結果。函數

 

 

路徑矩陣 第一行表明第一個節點  第m列表明第一個節點到第m個節點的距離  相似的 第二行第二列表明第二個節點到第二個節點的距離爲0 spa

無向圖code

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') %無向圖的最短路徑,則將稀疏矩陣與其轉置相加
無向圖的繪製及最短路徑

 

無向圖的距離矩陣blog

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

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

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

 

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'))
最小生成樹

相關文章
相關標籤/搜索