Эквивалентность "предка" Networkx в Юлии ЛайтГрафс - PullRequest
0 голосов
/ 18 марта 2019

Есть ли в Юлии функция LightGraph, которая эквивалентна функции предков в Networkx?

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Возможно более быстрый способ:

function ancestors(g::SimpleDiGraph{T}, src) where T <: Integer
    reverse!(g)
    a = Vector{T}()
    for (v, d) in enumerate(gdistances(g, src))
        if d < typemax(T)
            push!(a, v)
        end
    end
    reverse!(g)
    return a
end
0 голосов
/ 19 марта 2019

Не изначально, но это должно быть легко приблизительно:

function ancestors(g, src)
    reverse!(g)
    a = reduce(union, enumerate_paths(dijkstra_shortest_paths(g, src))
    reverse!(g)
    return a
end

Это потребует проверки, и это немного рискованно в случае выхода из функции до второго reverse!, но это намного эффективнее, чем неизменяемый reverse().

...