我想知道最有效的方法是验证来自T的所有目标节点是否可以从Python的NetworkX库中的至少一个源节点S到达。
对我来说,这应该是一个简单的多对多Dijkstra函数调用,其中S是源节点列表输入,T是目标节点列表输入。然后,我可以验证返回的值是否指示至少一个路由成功。对于那些可能熟悉它的人,这就是我使用PostgreSQL的pgRouting扩展来解决该问题的方式:
pgr_dijkstra(edges_sql, start_vids, end_vids)
但是,it seems from the documentation that a function where both the sources and targets are lists does not exist。我能找到的最接近的是multi_source_dijkstra
或all_pairs_dijkstra
。
我觉得multi_source_dijkstra
不够,因为我无法指定多个目标节点的列表作为输入,而all_pairs_dijkstra
太多,因为我不想浪费时间测试源节点之间的连接性或目标节点之间。此外,我完全希望自己的图在内部具有空隙,我只想测试原始条件-所有目标节点都可以从至少一个源节点到达。
我敢肯定multi_source_dijkstra
函数可以将某些东西拼凑在一起,但是我希望这样做尽可能高效,所以我希望我只是缺少一个可以实现我最想做的明显实现
编辑:@abc的图像。红色/黄色,红色/粉红色线和绿色线代表我在DFS或BFS算法中使用的子图。此配置返回True,声称从绿点(源)可以到达所有红点(目标)。