围绕这个主题有一些类似的问题,但我找不到符合我要求的东西。我正在研究食物网络程序(使用Javascript),并且有兴趣找到涉及所选物种(节点)的所有可能的食物链(路径)。换句话说,当有人在图中选择一个物种时,我想列出或突出显示涉及所选物种的每个食物链。有关我正在处理的图表类型的示例,请参阅EOL Food Web。
我希望这不应该太复杂,因为边缘没有加权(没有价值)但确实有方向。我不需要最短或最长的路径 - 只涉及所涉及物种的所有可能变化。
我认为一个聪明的解决方案可能涉及首先从所选节点找到所有“向下”(朝向猎物)路径,然后对“向上”(朝向捕食者)路径执行相同操作。然后只是连接所有可能组合的向下和向上。但那可能不是很优雅。
非常感谢你的想法!
答案 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)