繁体   English   中英

实现最短路径算法 Dijestra

[英]Implementing Shortest Path Algorithm Dijestra

在下图中实现 Dijestra 算法,比较时 < 运算符出现错误:

        if new_dist < next.get_distance():

错误 Function: heapq.heapify(unvisited_queue)

错误:

Graph data: ( a, b, 7) ( a, c, 9) ( a, f, 14) ( b, a, 7) ( b, c, 10) ( b, d, 15) ( c, a, 9) ( c, b, 10) ( c, d, 11) ( c, f, 2) ( d, b, 15) ( d, c, 11) ( d, e, 6) ( e, d, 6 ) ( e, f, 9) ( f, a, 14) ( f, c, 2) ( f, e, 9) Dijkstra 的最短路径 Traceback(最近一次调用最后一次):文件“e:\Graph Theory\DijestraShortestPath. py”,第 156 行,在 dijkstra(g, g.get_vertex('a'), g.get_vertex('e')) 文件“e:\Graph Theory\DijestraShortestPath.py”,第 95 行,在 dijkstra heapq.heapify (unvisited_queue) TypeError: '<' 在 'Vertex' 和 'Vertex' 的实例之间不支持

我们不介意读者,所以如果您向我们展示您的代码会更好。

但纯粹基于您提供给我们的一点点信息。 您似乎使用“顶点”作为数据结构,而 Python 不知道如何比较两个顶点结构。

一个很大的可能性是您将(距离,顶点)之类的项目放入堆中,并期望堆能够对它们进行排序。 但是如果堆中的两个对象具有相同的距离,则 (distance, vertex1) 和 (distance, vertex2) 最终会比较 vertex1 和 vertex2。

您可以让您的顶点有一个比较 function,或者您可以保留一个计数器,并通过编写以下内容将内容添加到堆中:

counter += 1
heapq.heappush(heap, (distance, counter, vertex))

这样您就可以放心,永远不会比较顶点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM