是可以使用邻接表的代码弗洛伊德沃肖尔? 我必须处理从一个文本文件,因此一万个顶点,邻接矩阵是不是一个解决方案。 任何已有的实现? 请帮忙。
Answer 1:
你不能用弗洛伊德沃肖尔与邻接表,因为它工作时,它使新的边缘。
例如:
首先,你的图有2个边(1-2,2-3)。 所以你初始化邻接矩阵:
形容词[1] [2] = 1; (装置具有1和2之间的边缘)
形容词[2] [3] = 1; (装置具有3和2之间的边缘)
形容词[1] [3] = + OO; (装置1和3之间没有边缘)
并且当FW的工作原理,边缘1-3时便会添加,因为形容词[1] [2] + ADJ [2] [3] <形容词[1] [3] =>形容词[1] [3] = 2(装置具有边缘1和3之间);
我不知道在你的图表和时间限制许多边缘如何解决,但如果你需要计算所有对在图形之间的最短路径,你可以做| V | 次Dijkstra算法用具有复杂性是优先级队列| V | * MAX(| V |登录| V |,| E |)优于| V | ^ 3弗洛伊德沃肖尔的。
Answer 2:
用弗洛伊德沃肖尔实现邻接表 ,但它在内部转换邻接表盯着算法中前矩阵。 如果您的图形不疏然后用形容词列表,而不是矩阵将没有帮助,因为反正你需要扫描所有边缘。 但是,如果你的图是非常稀疏,那么你可能要考虑从每个节点运行Dijkstra'a最短路径算法中,而不是使用弗洛伊德沃肖尔。 正如在其他响应提及映黄长发,如果你肯定知道| E | 〜| V | 登录^ K | V | 其中0 <= K然后运行Dijkstra的每个节点的算法中会给你比弗洛伊德沃肖尔更好的时间复杂度。
文章来源: Floyd Warshall using adjacency lists