Эквивалентность Networkx «предку» в графиках Julia LightGraphs

#python #julia #networkx #lightgraphs

#python #julia #networkx #графические изображения

Вопрос:

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

Ответ №1:

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

 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
  

Ответ №2:

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

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

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