mirror of
https://github.com/donnemartin/interactive-coding-challenges
synced 2026-01-11 11:58:02 +00:00
Add graph shortest path challenge
This commit is contained in:
41
graphs_trees/graph_shortest_path/priority_queue.py
Normal file
41
graphs_trees/graph_shortest_path/priority_queue.py
Normal file
@@ -0,0 +1,41 @@
|
||||
import sys
|
||||
|
||||
|
||||
class PriorityQueueNode(object):
|
||||
|
||||
def __init__(self, obj, key):
|
||||
self.obj = obj
|
||||
self.key = key
|
||||
|
||||
def __repr__(self):
|
||||
return str(self.obj) + ': ' + str(self.key)
|
||||
|
||||
|
||||
class PriorityQueue(object):
|
||||
|
||||
def __init__(self):
|
||||
self.queue = []
|
||||
|
||||
def insert(self, node):
|
||||
if node is not None:
|
||||
self.queue.append(node)
|
||||
return self.queue[-1]
|
||||
return None
|
||||
|
||||
def extract_min(self):
|
||||
if not self.queue:
|
||||
return None
|
||||
minimum = sys.maxsize
|
||||
for index, node in enumerate(self.queue):
|
||||
if node.key < minimum:
|
||||
minimum = node.key
|
||||
minimum_index = index
|
||||
node = self.queue.pop(minimum_index)
|
||||
return node.obj
|
||||
|
||||
def decrease_key(self, obj, new_key):
|
||||
for node in self.queue:
|
||||
if node.obj is obj:
|
||||
node.key = new_key
|
||||
return node
|
||||
return None
|
||||
Reference in New Issue
Block a user