2016-11-22 11 views
0

Matlabは最近、Graph and Network Algorithmsをサポートしているため、digraphオブジェクト上の関数distancesを呼び出すことで、任意の頂点から大きな1つのマトリックス内のグラフの頂点までの距離を取得できます。Matlabの有向グラフ最短サイクル

対角線上にこの行列はゼロです。どのようにして頂点から最短経路を得ることができますか?言い換えれば、その頂点を通る最短サイクルは何ですか?

+0

隣接行列の対角がゼロであるということは、実際に見ている行列の次数を述べることなく、あまり意味がありません。それが 'A^1'ならば、それは単に自己ループがないことを意味します。それは長い道のりの存在について何も言わない。 – excaza

+0

また、['shortestpath'](https://www.mathworks.com/help/matlab/ref/graph.shortestpath.html)を使用しないでください。または、対角の '〜= 0'上の所望の点まで連続した力に' A 'をつけるだけですか? – excaza

+0

['distanceances'](https://de.mathworks.com/help/matlab/ref/graph.distances.html)の出力には隣接行列はありませんが、ノードAからノードBまでの最短経路の長さは、ここで、Aは行インデックス、Bは列インデックスです。 ['shortestpath'](https://de.mathworks.com/help/matlab/ref/graph.shortestpath.html)は、距離だけでなく、完全なパスを返しますが、1つのノードペアに対してのみ返します。 ['distanceances'](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 
関連する問題