我已经看到加权图的 dijkstra算法我该怎么做才能在未加权图中找到最短路径?
我应该考虑所有边缘0或1之间的权重吗?
其次,我想在10^5
节点上实现bfs,以检查节点是否可以从任何其他节点访问?是否可能,因为定义[10^5][10^5]
的二维数组会给出内存错误。
答案 0 :(得分:0)
对于你的第一个问题,我确实在权重为1的未加权路径上实现了Dijkstra,它工作正常,但可能有更好的解决方案。
我不太记得bfs,抱歉!
答案 1 :(得分:0)
您可以将未加权的图表视为权重为1的每条边。
对于大图上的BFS,请查看大数据算法,这些算法使用“外部”内存(硬盘)来存储完整的图形,并使用有效的数据访问技巧来处理这些数据,以便算法运行的部分确实适合记忆。 一开始看: http://www.win.tue.nl/~hermanh/teaching/2IL35/AMM/04-elementary-graph-algorithms.pdf
答案 2 :(得分:0)
使用0作为弧的成本会导致图中每条可能路径的成本相等,因此任何人都可能是最短的。
使用1表示所有弧都具有相同的成本,因此Dijkstra将找到最小化开始和目标之间的弧数的路径。当然,可能会发生几条路径符合该条件,因此算法将返回其中一条路径。
我希望我的回答有所帮助。