描述
我有一个简单的有向图,它有两个端节点C,E(接收器)和一个起始节点A。我使用的框架是微软的GraphEngine。

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

我知道有几种图形算法,如A*,Dijkstra,Floyd Warshall,Bellman-Ford等.它们每一个都解决了非常具体的遍历问题。到目前一切尚好。但是现在我想学习如何使用利科遍历这个图。LIKQ是一种语言集成的知识查询语言.它允许用户通过图形遍历和lambda表达式实时查询、搜索和消费知识。
问题
我想做的是:找到节点A和C以及节点A和E之间的所有最短路径。
到目前为止,我得到的是:
List<PathDescriptor> paths = KnowledgeGraph.StartFrom(start)
.FollowEdge("OutEdges")
.VisitNode(_ => Action.Continue)
.FollowEdge("OutEdges")
.VisitNode(_ => Action.Continue)
.FollowEdge("OutEdges")
.VisitNode(_ => Action.Return)
.ToList();我可以从an通过,但这是一个手动的步骤。有没有机会让LIKQ决定如何从节点A开始,得到两条路径(到C和E)作为返回?
此外,我想知道BFS或DFS是否可以被翻译成LIKQ?

希望有人能把一些光明带入黑暗(:谢谢你提前!)
向你问好,菲尔
发布于 2017-04-13 08:06:39
目前,这有点棘手,扇出搜索算法不能保证发出的遍历步骤的顺序,但较短的路径实际上是提前调度的。因此,如果您在每一步中都放入Action.Continue & Action.Return,并设置一个全局标志变量--当您击中目标时,切换该位以使其他路径读取可以停止,那么您很可能会得到最短的路径。
https://stackoverflow.com/questions/42739177
复制相似问题