Есть ли хорошая библиотека C для теоретико-графовых манипуляций? Мне особенно нужно рассчитать сильно связанные компоненты ориентированного графа. Я реализовал алгоритм Тарьяна в Ruby следующим образом:
def strongly_connected_components graph
@index, @stack, @indice, @lowlink, @scc = 0, [], {}, {}, []
@graph = graph
vertices(@graph).each{|v| strong_connect(v) unless @indice[v]}
@scc
end
def strong_connect v
@indice[v] = @index
@lowlink[v] = @index
@index += 1
@stack.push(v)
@graph.each do |vv, w|
next unless vv == v
if !@indice[w]
strong_connect(w)
@lowlink[v] = [@lowlink[v], @lowlink[w]].min
elsif @stack.include?(w)
@lowlink[v] = [@lowlink[v], @indice[w]].min
end
end
if @lowlink[v] == @indice[v]
i = @stack.index(v)
@scc.push(@stack[i..-1])
@stack = @stack[0...i]
end
end
и он работал с маленькими графами, но по мере того, как граф рос, он начал возвращать ошибки "stack level too deep" из-за рекурсивного вызова метода strong_connect
. Думаю, мне нужна библиотека C и доступ к ней из Ruby, на котором написана основная программа.
В дополнение к библиотеке, любое предложение по использованию этого в библиотеке Ruby будет полезным.