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