我一直在嘗試在 Python 中使用 Dijkstra 算法實現(xiàn)優(yōu)先級隊列和距離表。這是優(yōu)先隊列的實現(xiàn):from heapq import heapify, heappush, heappopclass priority_dict(dict): def __init__(self, *args, **kwargs): super(priority_dict, self).__init__(*args, **kwargs) self._rebuild_heap() def _rebuild_heap(self): self._heap = [(v, k) for k, v in self.items()] heapify(self._heap) def smallest(self): heap = self._heap v, k = heap[0] while k not in self or self[k] != v: heappop(heap) v, k = heap[0] return k def pop_smallest(self): heap = self._heap v, k = heappop(heap) while k not in self or self[k] != v: v, k = heappop(heap) del self[k] return k def __setitem__(self, key, val): super(priority_dict, self).__setitem__(key, val) if len(self._heap) < 2 * len(self): heappush(self._heap, (val, key)) else: self._rebuild_heap() def setdefault(self, key, val): if key not in self: self[key] = val return val return self[key] def update(self, *args, **kwargs): super(priority_dict, self).update(*args, **kwargs) self._rebuild_heap() def sorted_iter(self): while self: yield self.pop_smallest()這是結(jié)果:Traceback (most recent call last): File "dijkstra.py", line 76, in <module> shortest_path(g, 0, 6) File "dijkstra.py", line 46, in shortest_path distance_table = build_distance_table(graph, source) File "dijkstra.py", line 23, in build_distance_table while len(priority_queue.keys()) > 0:AttributeError: 'numpy.float64' object has no attribute 'keys'我正在使用 Python 3.7。我在網(wǎng)上搜索過,雖然它與 Python 版本有關(guān)。無法弄清楚為什么它看不到該屬性。你能告訴我我錯過了什么嗎?
1 回答

烙印99
TA貢獻(xiàn)1829條經(jīng)驗 獲得超13個贊
priority_queue = distance
本來應(yīng)該:
priority_queue[neighbor] = distance
解決了,謝謝
添加回答
舉報
0/150
提交
取消