单源最短路径。给定指定的顶点,计算所有其他节点的最短路径。我知道有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;
}
}
}
我想计算两个索引顶点之间的最短路径。我想通过递归和设置临时值来做到这一点,每次检测到一个路径时,我可以计算长度并覆盖临时值,如果它比当前短。问题是当返回到上层时,它可以有一个函数调用的几个返回(它可能有各种子分支路径),因此外层不能分辨哪个是哪个,它最终是一个混乱。
答案 0 :(得分:1)
如果你做了实际工作,我强烈建议你不要重新发明轮子并使用Breadth First Search from the boost library。
如果这是一个学校项目,你需要实现一个递归算法,你可以去Floyd-Warshall algorithm。甚至有一些伪代码可以很容易地转换为c ++代码。