📌

グラフが連結しているか判定する

2024/04/10に公開

幅優先探索(BFS)を用いて、グラフが連結しているか判定します。考え方は、次の通りです。

任意のグラフに対してBFSを行い、全ての頂点を訪問していた場合に、連結していると判定します。

実装

function isconnect(g)
    nexts = [1]
    seen = fill(false, length(g))
    seen[1] = true

    while !isempty(nexts)
        target_vertex = popfirst!(nexts)

        for vertex ∈ g[target_vertex]
            if seen[vertex]
                continue
            end

            push!(nexts, vertex)
            seen[vertex] = true
        end
    end

    return all(x -> x, seen)
end

g1 = [[2], [1, 3], [2]]

@show isconnect(g1)

g2 = [[], [1, 3], [2]]

@show isconnect(g2)

結果

yuu@penguin:~/src/jelly/0410$ julia sample.jl 
isconnect(g1) = true
isconnect(g2) = false

Discussion