最短路径算法在VTK中的实现

1 背景

    三维空间中存在一些点,依次连接它们可以形成一条折线。点的数量可以动态添加(可能在折线的两端添加,也可能在中间插入)。现在问题在于,只知道各点的三维坐标,并不知道他们的顺序(拓扑关系)。因此希望通过最短路径算法[2]来确定点的拓扑关系[8]以及其最短路径。

    参考资料[2]指出最常用的路径算法有:Dijkstra算法,A*算法,SPFA算法,Bellman-Ford算法,Floyd-Warshall算法,Johnson算法。本文将结合实际问题对这些方法进行分析。

2 Dijkstra算法

    关于Dijkstra算法的介绍,可见参考资料[2][7],这两份资料都给出了相关代码,但是参考资料[7]的代码更加完整和详细(经过测试)。参考资料[7]的代码主要是计算单个源点到各个其它各个点之间的最短路径,并且需要已经知道各个点之间的连接关系(拓扑关系)。

    参考资料[4]同样说明了Dijkstra算法的思路,但是并没有参考资料[7]说的清晰。然而,它指出了其它最短路径问题:

    ①单目标最短路径问题(Single-Destination Shortest-Paths Problem):找出图中每一顶点v到某指定顶点u的最短路径。只需将图中每条边反向,就可将这一问题变为单源最短路径问题,单目标u变为单源点u。

    ②单顶点对间最短路径问题(Single-Pair Shortest-Path Problem):对于某对顶点u和v,找出从u到v的一条最短路径。显然,若解决了以u为源点的单源最短路径问题,则上述问题亦迎刃而解。而且从数量级来说,两问题的时间复杂度相同。

    ③所有顶点对间最短路径问题(All-Pairs Shortest-Paths Problem):对图中每对顶点u和v,找出u到v的最短路径问题。这一问题可用每个顶点作为源点调用一次单源最短路径问题算法予以解决。

3 VTK中的实现

    VTK中vtkDijkstraGraphGeodesicPath采用了上述算法,可以用于测量三维物体的测地距离


参考资料

[1]已知所有点的坐标,求经过所有点的最短路径

[2]最短路径

[3]VTK/Examples/Cxx/Graphs/ShortestPath

[4]求单源点的最短路径——Dijkstra算法

[5]求过n个点的最短路径给出n个点的坐标;每个点只能以直线相连;求出一条过这n个点且最短的路径

[6]常被遗忘的知识点 最短路径 关键路径 的介绍 软考考试要点

[7]Dijkstra算法(单源最短路径)

[8]图论

你可能感兴趣的:(最短路径算法在VTK中的实现)