如何编写递归函数来计算图数据结构中的最短路径

时间:2014-12-19 15:42:26

标签: c++ data-structures

单源最短路径。给定指定的顶点,计算所有其他节点的最短路径。我知道有Dijkstra和Floyd算法。但我在想是否有一种递归方式来解决它。这是我的工作

int RecursiveShortestPath(int s,int t)
{
    int length;
    int tmp;
    for (Edge e = G.FirstEdge(s); G.isEdge(s); e = G.NextEdge(e))
    {
        if (ToVertex(e) = t)
        {
            length = G.Weight(e);
            return length;
        }
        else if ((tmp = RecursiveShortestPath(ToVertex(e), t)) > 0)
        {
            length = length + tmp;
            return length;
        }
    }
}

我想计算两个索引顶点之间的最短路径。我想通过递归和设置临时值来做到这一点,每次检测到一个路径时,我可以计算长度并覆盖临时值,如果它比当前短。问题是当返回到上层时,它可以有一个函数调用的几个返回(它可能有各种子分支路径),因此外层不能分辨哪个是哪个,它最终是一个混乱。

1 个答案:

答案 0 :(得分:1)

如果你做了实际工作,我强烈建议你不要重新发明轮子并使用Breadth First Search from the boost library

如果这是一个学校项目,你需要实现一个递归算法,你可以去Floyd-Warshall algorithm。甚至有一些伪代码可以很容易地转换为c ++代码。