[英]Recursive search of all viable paths in graph by edge length
我校分配新建分配FY创建一个程序,它得到一个图表,发现极小子出来生成树与条件的两个点(这是在运行启动预选)之间的路径将以数字之间的边缘被最短的。
任务本身还可以,但我要努力的是优化。 当我找到A和B之间的路径(预选点)时,我尝试通过DFS递归找到所有其他可能的选项,然后执行MST并选择最小的选项。 由于该路径必须具有最少的边数,并且我是通过第一个BFS找到其中一条路径的,所以我知道我可以在X递归后剪切DFS搜索,其中X是在BFS中找到的B中A的边数。 它在某些类型的图形(边数是顶点数的3倍)中非常快地工作,但是当例如边数大10倍时,它就不会停止运行。
我问我的朋友一个提示,他说我使用BFS递归查找其他路径,他还可以,但是性能有何不同? DFS将首先尝试运行,并在到达特定点或浪费可用的跃点时停止运行,BFS首先变宽,然后以相同的深度步长结束所有路径,但是我仍然做同样多的跃迁吧?
我在这里想念什么? 还是我理解他错了? 感谢您的任何想法。
编辑:我试图检查我在特定DFS中已经访问过的哪些边,以避免朝相反的方向运行,回到我所处的位置,依此类推,但它只会在某些图形组上产生延迟,而对其他图形却没有明显的帮助。
EDIT2:交换边缘和顶点数量(不能多于顶点)
因此,我完成了分配工作,并且在查找A / B两点之间的其他路径/所有路径时,据我发现,DFS和BFS的结果相同。
对我而言,关键是正确优化解决方案。 我的最终解决方案结合了不断扩展和深入发展的过程(例如,它可以更快地完成,但我对此表示怀疑):
换句话说,我们通过从B到达的所有点来标记所有点,然后从A遍历那些可访问的点(具有默认值以外的设置值以及来自A的跃点的适当值),并将所有可能的路径组合在一起。
有我们的道路。 (由于任务仍处于活动状态,所以我故意留下了这个模糊的内容)。 如果将来有人需要更好的解释,请发表评论,我会详细说明。 如果有人找到更好的解决方案,请将其发布为您的答案,如果正确,我将其勾选为正确的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.