C# 最短路径图算法

问题描述 投票:0回答:2

这是我的问题。我有一系列建筑物不同部分的照片,我需要将它们链接在一起。之后,我需要按顺序显示每张照片,以显示从 A 点到 B 点的路径……即从教室到消防通道。

我做了一些研究,我相信非有向未加权图应该可以解决问题。

因为我在这方面没有太多经验。我想知道如何将照片存储在数据结构中以及是否有任何库可以完成这项工作?

c# asp.net shortest-path
2个回答
1
投票

是的,你需要应用一些算法,可以为你解决问题。

您可以使用这个很棒的库:

解决这部分问题。

对于存储数据的方式,您需要定义顶点(照片)和顶点之间的边,例如(照片A-照片B),(照片A-照片C)等。

您必须从数据库中恢复该信息并在quickgraph中加载相应的结构,并让它为您找到路径。

这里有大量的文档和示例:

对于类似的东西我用过:

  • MyEdges 类,它实现
    IEdge<T>
    (T 应该是你的照片 ID 类型,int 或其他)- 表示照片(地点)之间的边缘
  • Graph 类,继承
    AdjacencyGraph<T,MyRelation>
    。您使用可用的 MyEdges 加载它(这是有向图)
  • PathFinder算法类:我继承自
    FloydWarshallAllShortestPathAlgorithm<T, MyRelation>

那么你必须:

  • 创建边(即从数据库中读取它们)
  • 实例化一个 Graph 类,并将所有边添加到其中
  • 使用 PathFinder 构造函数,使用图形作为参数。这找到了路径。

此算法可让您指定从给定照片(边缘)可以到达哪些照片,假设它们之间的距离相似,但您必须定义所有路线(从 A 到 B、从 B 到 A 等) )。这是 OP 的“未加权”部分。如果您的情况不同,您必须阅读文档。

如果您希望将 A 添加到 B 也会将 B 添加到 A,则可以实现

UnDirected
图。它可以节省一些代码行,但我通常更喜欢自己添加所有可能性。更容易思考“从图书馆我可以去A过道和B过道。从B过道到图书馆和实验室”,等等,试图思考所有的边缘。

您可以在数据库中创建两个表:

  • 照片(带身份证)
  • 路径(IdFrom 和 IdTo)

这很容易维护和实施。


0
投票

您可以使用我的库 Kemsekov.GraphSharp

https://github.com/Kemsekov/GraphSharp

与 QuickGraph 相比,它更适合处理大型图实例,因为它包含图路径查找的并行实现 + 中间路径查找器的 meet,同时从两端搜索路径,大大减少了路径搜索的时间。

https://github.com/Kemsekov/GraphSharp.Samples/tree/main/samples%2FFindPathByMeetInTheMiddle

© www.soinside.com 2019 - 2024. All rights reserved.