ruby - 如何使用 Ruby 在图中查找连通分量

标签 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]] 但是 g 中没有方法 each_connected_component

class RGL::DirectedAdjacencyGraph
  include RGL::Graph
end

没有帮助。

最佳答案

有两件事可能会有所帮助(注意:我不太了解这个 gem,可能有更好的方法)

  • 您需要添加一个 require 才能使该方法可用: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]]

关于ruby - 如何使用 Ruby 在图中查找连通分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000259/

相关文章:

ruby-on-rails - 按对象属性对数组进行排序但使用 nil? Ruby 中的条件

Ruby 中的 Mysql 适配器 ActiveRecord 抛出 : 'Packets out of order'

actionscript-3 - 高级色键代码示例

java - 星算法不起作用

algorithm - 如果这个更简单、更快的算法有效,为什么我们需要 Dijkstra 算法?

python - 使用神经网络的骑士之旅

ruby - 如果在比较期间没有匹配项,如何返回 nil 对象

ruby - 如何并行启动 Ruby 命令

algorithm - 使用 Kruskal 算法的最小生成树

android - 如何使用 AChartEngine 在一个 Activity 中显示两个饼图并在图表中显示我自己的数据