说明
我有一个简单的有向图,它有两个端点C,E(接收器)和一个起始节点a。我使用的框架是微软的GraphEngine
.net - Microsoft GraphEngine LIKQ查询-LMLPHP
我的TSL文件如下所示:图节点由nodetem组成,nodetem只是一个具有属性Id和名称的容器节点具有传出关系的OutEdges和传入释放的InEdges。
.net - Microsoft GraphEngine LIKQ查询-LMLPHP
我知道有几种图形算法,如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?
.net - Microsoft GraphEngine LIKQ查询-LMLPHP
希望有人能给黑暗带来光明
非常感谢你提前!
谨致问候,
菲尔

最佳答案

目前这有点棘手,扇出搜索算法不能保证发出的遍历步骤的顺序,但较短的路径实际上会提前得到调度。因此,如果在每个步骤中都输入Action.Continue & Action.Return,并生成一个全局标志变量,以便在命中目标时,切换该位,使读取该位的所有其他路径都可以停止,则可能会得到最短路径。

10-08 15:11