【问题标题】:How to write a recursive function to calculate shortest path in a graph data structure如何编写递归函数来计算图形数据结构中的最短路径
【发布时间】:2014-12-19 15:42:26
【问题描述】:

单源最短路径。给定一个指定的顶点,计算所有其他节点的最短路径。我知道有 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;
        }
    }
}

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

【问题讨论】:

  • 将结果收集到矢量或地图中,或者如果图形可以被扩充,那么就在那里。
  • 我认为您的= 应该是==

标签: c++ data-structures


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 2017-03-19
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多