基于邻接表的DFS割点搜索——matlab代码

基于邻接表的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.csdn.net/qq_40679299/article/details/79436376
从此博主文章受益良多,非常感谢。

你可能感兴趣的:(基于邻接表的DFS割点搜索——matlab代码)