sqlite 如何使用SQL获取有向图中给定节点到所有连接节点的路径?[duplicate]

pieyvz9o  于 2023-03-03  发布在  SQLite
关注(0)|答案(1)|浏览(151)
    • 此问题在此处已有答案**:

basic recursive query on sqlite3?(5个答案)
3天前关闭。
假设我们有一个大型SQLite表edge``CREATE TABLE edge(from TEXT, to TEXT),其中包含有向图的所有边(可能是循环的)。图中的每个节点都有一个唯一的id,类型为TEXT。我们如何高效地找到从给定节点到所有连接节点的所有路径?如果有多条路径连接2个节点,则只需要1条路径。由于图非常大,首先获得所有可能的路径并通过检查开始/结束对来去除重复是不够有效的。

例如,如果给定节点是A,则结果(不唯一)应如下所示。

A->B
A->B->E
A->B->E->C
A->F
e7arh2l6

e7arh2l61#

我认为最好的方法是多遍解决方案。第一步:使用A-〉B和A-〉F创建临时表--换句话说,仅包含起始节点等于起始节点的行。在后续的每一步中,插入起始节点等于临时表中任意终止节点且新的终止节点尚未在表中的所有行。要消除重复的终止节点,请选择此选项(或min,无所谓)from-node。每次传递都会为它添加的每个to-node恰好多添加一行,并且最终会添加每个可访问的to-node。一旦有了这个表,就可以在生成的简化图上实现宽度优先搜索。

相关问题