如何使用Ruby在图中查找连接的组件

时间:2014-01-08 15:47:45

标签: ruby algorithm graph libraries graph-algorithm

查找图表的连接组件的最简单方法是什么? 没有强连接的组件,可以在TSort模块中找到。

有一个库RGL,它在模块RGL::Graph::each_connected_component中有一个方法,但是如何构建图并为此图调用此方法?

我创建了像

这样的示例图表
g = RGL::DirectedAdjacencyGraph[1,2, 2,3, 4,5]

并希望找到它的连接组件,[[1,2,3],[4,5]],但each_connected_component

中没有方法g
class RGL::DirectedAdjacencyGraph
  include RGL::Graph
end

没有帮助。

1 个答案:

答案 0 :(得分:2)

可能有所帮助的两件事(警告:我不太了解这个宝石,可能有更好的方法)

  • 您需要添加要求才能使该方法可用:require 'rgl/connected_components'

  • each_connected_component采用无向图,但您可以根据需要将有向图转换为无向图

以下代码似乎可以满足您的需求:

require 'rgl/base'
require 'rgl/adjacency'
require 'rgl/connected_components'

g = RGL::DirectedAdjacencyGraph[1,2, 2,3, 4,5]

components = []

g.to_undirected.each_connected_component { |c| components <<  c }

p components

# => [[3, 2, 1], [5, 4]]