Connected graph given adjacency matrix

조회 수: 24 (최근 30일)
imperial1991
imperial1991 2012년 5월 29일
답변: Hon Wah Yeung 2021년 1월 31일
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!

채택된 답변

Wolfgang Schwanghart
Wolfgang Schwanghart 2012년 5월 29일
You can use the function dmperm to see if a graph consists of one or several connected components. E.g. see the example here http://blogs.mathworks.com/steve/2007/03/20/connected-component-labeling-part-3/
HTH, W.
  댓글 수: 1
imperial1991
imperial1991 2012년 5월 30일
Hi wolfgang, this is great! thanks a lot!

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

Christine Tobler
Christine Tobler 2016년 12월 22일
편집: Christine Tobler 2019년 11월 22일
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
Jonathan DuBois
Jonathan DuBois 2017년 8월 24일
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
Christine Tobler 2019년 11월 22일
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).

댓글을 달려면 로그인하십시오.


Andrei Bobrov
Andrei Bobrov 2012년 5월 29일
try grTheory - Graph Theory Toolbox by Sergii Iglin
  댓글 수: 1
imperial1991
imperial1991 2012년 5월 30일
hi andrei, it seems like there's no function for checking whether a graph is connected or not. thanks anyway!

댓글을 달려면 로그인하십시오.


Hon Wah Yeung
Hon Wah Yeung 2021년 1월 31일
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

카테고리

Help CenterFile Exchange에서 Directed Graphs에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by