基于邻接表的DFS割点搜索——matlab代码
下面就讲讲我对于这个问题的个人理解。
首先是随便选择一个开始节点且此时父节点为其本身,当搜索到第一个节点的邻接节点时,将邻接节点作为搜索的起点,采用的是递归的搜索方式。
其次要讲的是,在遍历邻接表搜索的同时,对low矩阵的更新也是同时进行的(好多文章都没有提出来,让我懵半天)。low矩阵的具体更新方式可以参考本文附带连接的文章。
matlab编写递归程序的时候,函数的参数传递很重要!(废话好像有点多,下面是代码)
function [flag,num,low]= DFS(cur,father,index,num,low,n,A,flag,root)
child = 0;
index = index + 1;
num(cur) = index;
low(cur) = index;
for i = 1:n
if A(cur,i) == 1
if num(i) == 0
child = child + 1;
[flag,num,low] = DFS(i,cur,index,num,low,n,A,flag,root);
low(cur) = min(low(cur),low(i));
if(cur~=root && low(i)>=num(cur))
flag(cur) = 1;
end
if(cur == root && child == 2)
flag(cur) = 1;
end
elseif(num(i)~=0 && i~=father)
low(cur) = min(low(cur),num(i));
end
end
end
主要参考:https://blog.youkuaiyun.com/qq_40679299/article/details/79436376
从此博主文章受益良多,非常感谢。