2016-11-22 43 views
0

Matlab的近期的圖和網絡算法的支持允許獲得所有從任何頂點到大的矩陣圖的任一頂點的距離 - 通過調用函數distances一個digraph對象。Matlab的有向圖最短週期

在它的對角線上,這個矩陣是零。那麼我怎樣才能獲得從任何頂點到其自身的最短路徑呢?換句話說,通過頂點的最短週期是多少?

+0

鄰接矩陣對角線爲零並不真正意義,沒有說明你正在查看的矩陣的程度。如果它是'A^1',那就意味着沒有自循環。這並沒有說明有關更長路徑的存在。 – excaza

+0

另外,爲什麼不使用['最短路徑'](https://www.mathworks.com/help/matlab/ref/graph.shortestpath.html)?或者只是將'A'提高到連續的功率,直到對角線'〜= 0'上的所需點? – excaza

+0

['距離'](https://de.mathworks.com/help/matlab/ref/graph.distances.html)的輸出不是鄰接矩陣,而是從節點A到節點B的最短路徑的長度,其中A是行索引,B是列索引。 ['最短路徑'](https://de.mathworks.com/help/matlab/ref/graph.shortestpath.html)不僅返回距離,而且返回完整路徑,但僅限於一個節點對。 ['距離'](https://de.mathworks.com/help/matlab/ref/graph.distances.html)返回從任何節點到任何節點的最短路徑的長度。 –

回答

1
dist = distances(G); 
% big matrix [nVertices x nVertices] containing Inf (no connection) 
% Problem: diagonal is zero 

circDist = dist+dist'; 
% [nVertices x nVertices] Distance for circulatory paths: A→B + B→A 

[circDist,minInd] = min(circDist+diag(Inf(nVertices,1)),[],1); 
% [nVertices x 1] take circulatory circle with smallest distance