www.gusucode.com > Floyd算法、dijkstra算法、贪婪算法、遗传算法、搜索算法、蚁群算法、哈密顿环路的matlab源程序 > code/搜索算法/liantong.m
function w=liantong(D) %使用广度优先搜索判断图是否连通 %D是01关联矩阵,且对角线元素为1 L=size(D,1); FOUND=zeros(1,0); %数据初始化 v=1;%当前节点集为第一个节点 FOUND=[FOUND,v]; %删除当前节点相互之间的关联边 D(v,v)=0; %找当前节点的相邻节点 p=D(v,:); vv=find(p==1);%当前节点的相邻的节点 if length(vv)==0 w=0; return end %修正邻接矩阵 D(v,:)=zeros(1,L); D(:,v)=zeros(L,1); FOUND=[FOUND,vv]; while length(find(FOUND))<L v=vv; clear vv; LL=length(v); %第一步:删除当前节点相互间的关联边 for i=1:LL for j=1:LL D(v(i),v(j))=0; D(v(j),v(i))=0; end end %第二步:找与当前节点的相邻接的节点 vv=zeros(1,0); for i=1:LL p=D(v(i),:); pos=find(p==1); vv=[vv,pos]; end if length(vv)==0%如果没有邻接节点,说明不连通 w=0; return end %第三步:修正邻接矩阵 for i=1:LL D(v(i),:)=zeros(1,L); D(:,v(i))=zeros(L,1); end FOUND=[FOUND,vv]; end w=1;