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'))