查找所选节点的有向,未加权图形中的所有路径

时间:2015-02-25 21:38:10

标签: javascript graph nodes

围绕这个主题有一些类似的问题,但我找不到符合我要求的东西。我正在研究食物网络程序(使用Javascript),并且有兴趣找到涉及所选物种(节点)的所有可能的食物链(路径)。换句话说,当有人在图中选择一个物种时,我想列出或突出显示涉及所选物种的每个食物链。有关我正在处理的图表类型的示例,请参阅EOL Food Web

我希望这不应该太复杂,因为边缘没有加权(没有价值)但确实有方向。我不需要最短或最长的路径 - 只涉及所涉及物种的所有可能变化。

我认为一个聪明的解决方案可能涉及首先从所选节点找到所有“向下”(朝向猎物)路径,然后对“向上”(朝向捕食者)路径执行相同操作。然后只是连接所有可能组合的向下和向上。但那可能不是很优雅。

非常感谢你的想法!

1 个答案:

答案 0 :(得分:0)

您的解决方案大致正确。

  • 以“向下”方式递归遍历图表,记录所有路径。
  • 递归遍历图表“向上”记录所有路径。
  • 生成前两组中的所有路径组合。

这假设图表没有周期(即没有生物以自身或任何捕食者或掠食者捕食者等为食)。

这是遍历的一些伪代码。使用递归方法从感兴趣的节点开始:

paths := []
for all children
    extendPath(paths, child)


function extendPath(NodeList[] paths, Node node)    
    for path in paths
        path.add(node)

    for child in node.children
        extendPath(paths, child)