summaryrefslogtreecommitdiffstats
path: root/src/graph.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-12-12 01:31:23 -0500
committerJesse Luehrs <doy@tozt.net>2022-12-12 01:31:23 -0500
commit229f1057468e6f7508ef36e804bc55af224b9fab (patch)
tree3f3e746ac02579292d09f982bc5b2bb578add57a /src/graph.rs
parent349ec2174dc890a5b7a8d47b5ca5d8c83fea1ec6 (diff)
downloadadvent-of-code-229f1057468e6f7508ef36e804bc55af224b9fab.tar.gz
advent-of-code-229f1057468e6f7508ef36e804bc55af224b9fab.zip
optimize day 12
Diffstat (limited to 'src/graph.rs')
-rw-r--r--src/graph.rs8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/graph.rs b/src/graph.rs
index 74c2910..9312e7c 100644
--- a/src/graph.rs
+++ b/src/graph.rs
@@ -9,13 +9,17 @@ where
fn edges(&self, v: Vertex) -> Self::Edges;
fn edge(&self, v: Vertex, e: Edge) -> (Vertex, u64);
- fn dijkstra(&self, start: Vertex, end: Vertex) -> (u64, Vec<Vertex>) {
+ fn dijkstra<F: Fn(Vertex) -> bool>(
+ &self,
+ start: Vertex,
+ end: F,
+ ) -> (u64, Vec<Vertex>) {
let mut to_visit = priority_queue::PriorityQueue::new();
let mut prev = HashMap::new();
prev.insert(start, start);
to_visit.push(start, std::cmp::Reverse(0));
while let Some((v, std::cmp::Reverse(distance))) = to_visit.pop() {
- if v == end {
+ if end(v) {
let mut path = vec![v];
let mut cur = v;
while let Some(next) = prev.get(&cur) {