algorithm - 在邻接列表中查找路径
问题描述
查找邻接列表的两个节点之间的所有路径的最佳算法是什么
示例输入:
source = 1
destination = 5
list = {1: [2], 2: [4], 3: [4, 5], 4: [5]}
解决方案
def paths(adj, st, en)
return [] unless adj.key?(st)
adj[st].each_with_object([]) do |nxt,arr|
nxt == en ? arr << [st, en] :
paths(adj, nxt, en).each { |a| arr << [st, *a] }
end
end
adj = { 1=>[2,3], 2=>[4,7], 3=>[4,8], 4=>[5,6], 5=>[7], 6=>[7] }
请注意,我添加了一个隔离节点8
。
paths(adj, 1, 7)
#=> [[1, 2, 4, 5, 7],
# [1, 2, 4, 6, 7],
# [1, 2, 7],
# [1, 3, 4, 5, 7],
# [1, 3, 4, 6, 7]]
推荐阅读
- swift - 如何快速从sqlite中检索图像的ID(保存在BLOB中)
- python - 限制标记词的输出范围
- java - org.apache.axis2.AxisFault: HTTP (401) 未经授权的地址:
- java - java - 如何在java中使用三个嵌套的for循环来实现带有_的倒金字塔?
- android - 有没有什么特别的方法可以让系统卸载弹出窗口出现在android中的监听器
- android - 想从 firebase 数据库中检索唯一的卢比值吗?
- c# - 当 switch (enum) 不覆盖 COMPILE C# 中的每个枚举值时是否可以发出警告
- bash - 如何在 nextex ssh 会话中设置变量
- android - 从左向右滑动时手势检测器不起作用
- c# - 如何从 JSON 字符串中删除特定的 JSON 属性