From 56ad2caf632c5be43348da08a2886646469d81a2 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Sun, 15 Jan 2023 19:43:01 -0800 Subject: [PATCH] src: Add and use default MinPQ.addOrChangePriority --- src/graphs/shortestpaths/AStarSolver.java | 6 +----- src/graphs/shortestpaths/DijkstraSolver.java | 6 +----- src/minpq/MinPQ.java | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/graphs/shortestpaths/AStarSolver.java b/src/graphs/shortestpaths/AStarSolver.java index 8b23729..7da0864 100644 --- a/src/graphs/shortestpaths/AStarSolver.java +++ b/src/graphs/shortestpaths/AStarSolver.java @@ -43,11 +43,7 @@ public AStarSolver(AStarGraph graph, V start, V goal) { edgeTo.put(to, e); distTo.put(to, newDist); double priority = newDist + graph.estimatedDistance(to, goal); - if (pq.contains(to)) { - pq.changePriority(to, priority); - } else { - pq.add(to, priority); - } + pq.addOrChangePriority(to, priority); } } } diff --git a/src/graphs/shortestpaths/DijkstraSolver.java b/src/graphs/shortestpaths/DijkstraSolver.java index 3d6401d..c99d53a 100644 --- a/src/graphs/shortestpaths/DijkstraSolver.java +++ b/src/graphs/shortestpaths/DijkstraSolver.java @@ -39,11 +39,7 @@ public DijkstraSolver(Graph graph, V start) { if (newDist < oldDist) { edgeTo.put(to, e); distTo.put(to, newDist); - if (pq.contains(to)) { - pq.changePriority(to, newDist); - } else { - pq.add(to, newDist); - } + pq.addOrChangePriority(to, newDist); } } } diff --git a/src/minpq/MinPQ.java b/src/minpq/MinPQ.java index b94bc91..a9dbbf4 100644 --- a/src/minpq/MinPQ.java +++ b/src/minpq/MinPQ.java @@ -22,6 +22,21 @@ public interface MinPQ { */ void add(E element, double priority); + /** + * Adds an element with the given priority value if it is not already present. Otherwise, updates the priority value + * of the existing element. + * + * @param element the element to add or update. + * @param priority the priority value for the element. + */ + default void addOrChangePriority(E element, double priority) { + if (!contains(element)) { + add(element, priority); + } else { + changePriority(element, priority); + } + } + /** * Returns true if the given element is in this priority queue. *