2

描述

我有一个简单的有向图,它有两个末端节点 C、E(汇)和一个起始节点 A。我使用的框架是 Microsoft 的GraphEngine

图形生成

我的 TSL 文件如下所示: 图形节点由一个NodeItem组成,它只是一个具有属性IdName的容器。该节点具有用于传出关系的OutEdges和用于传入关系的InEdges 。

TSL 文件

我知道有几种图算法,如 A*、Dijkstra、Floyd Warshall、Bellman-Ford 等。它们中的每一个都解决了非常具体的遍历问题。到目前为止,一切都很好。但现在我想学习如何用LIKQ遍历这个图。LIKQ 是一种语言集成的知识查询语言。它允许用户通过图遍历和 lambda 表达式实时查询、搜索和消费知识。

问题

我想做的事:找到节点 A 和 C以及节点 A 和 E之间的所有最短路径。LIKQ 可以做到这一点吗?

这是我到目前为止得到的:

 List<PathDescriptor> paths = KnowledgeGraph.StartFrom(start)
            .FollowEdge("OutEdges")
            .VisitNode(_ => Action.Continue)
            .FollowEdge("OutEdges")
            .VisitNode(_ => Action.Continue)
            .FollowEdge("OutEdges")
            .VisitNode(_ => Action.Return)
            .ToList();

我可以从A - B - D - E遍历。但这在某种程度上是一个手动步骤。有没有机会让 LIKQ 决定如何从节点 A 开始并获得两条路径(到 C 和 E)作为返回?

此外,我想知道 BFS 或 DFS 是否可以翻译成 LIKQ?

VS调试

希望有人能给黑暗带来一些光明(:非常感谢你提前!

最好的问候,菲尔

4

1 回答 1

4

目前这有点棘手,扇出搜索算法不能保证发出的遍历步骤的顺序,但实际上较短的路径确实会更早安排。因此,如果您Action.Continue & Action.Return输入每一步,并创建一个全局标志变量,以便当您击中目标时,切换该位以便读取它的所有其他路径都可以停止,那么您可能会获得最短路径。

于 2017-04-13T08:06:39.830 回答