Connected graph given adjacency matrix
Ältere Kommentare anzeigen
Hi all, I'm working on a research project on graphical models involving a large dimension (large number of nodes). I'm just wondering, is there an existing efficient algorithm to determine whether the graph is connected or not given its adjacency matrix? I've tried looking but it seems that the existing ones are brute force algorithms which are costly. Does MATLAB have a built-in function? When I checked, it seems that none exists as of now.
Help would be greatly appreciated!
Akzeptierte Antwort
Weitere Antworten (3)
Christine Tobler
am 22 Dez. 2016
Bearbeitet: Christine Tobler
am 22 Nov. 2019
I realize this is an old question, but since it's still getting visits, I have a small addition. As of R2015b, the new graph and digraph classes have a method for computing connected components. To check whether a graph is connected based on its adjacency matrix A, use
g = digraph(A);
bins = conncomp(g, 'Type', 'weak');
isConnected = all(bins == 1);
The vector bins gives the bin number for each node of A. If a graph is connected, all nodes will be in one bin, which is checked using all(bins == 1). This is not necessarily faster than dmperm, but easier to read.
2 Kommentare
Jonathan DuBois
am 24 Aug. 2017
What is the point of the first command? Should it be: bins = conncomp(g, 'Type', 'weak')? It works with g in the second command but with A, I get the following error: Undefined function 'conncomp' for input arguments of type 'double'.
Christine Tobler
am 22 Nov. 2019
Thank you, yes, this was a typo. I've edited the original answer to fix this (although it took me two years to realize you had commented on this answer).
Hon Wah Yeung
am 31 Jan. 2021
This will work if you can at least load the matrix (meaning the matrix is not larger than the max possible array for Matlab) to Matlab.
function [idx,Group] = CheckConnected(E)
L=length(E);
T=find(E(:,1)~=0);
T=[T;1]';
M=sum(E(:,T),2);
T1=union(find(M~=0),T);
while length(T1)>length(T)
T=T1;
M=sum(E(:,T),2);
T1=union(find(M~=0),T);
end
if length(T)==L
idx=1;
Group=T;
else
idx=0;
Group=T;
end
end
Kategorien
Mehr zu Networks finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!