diff options
author | Jesse Luehrs <doy@tozt.net> | 2022-12-12 01:31:23 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2022-12-12 01:31:23 -0500 |
commit | 229f1057468e6f7508ef36e804bc55af224b9fab (patch) | |
tree | 3f3e746ac02579292d09f982bc5b2bb578add57a /src/graph.rs | |
parent | 349ec2174dc890a5b7a8d47b5ca5d8c83fea1ec6 (diff) | |
download | advent-of-code-229f1057468e6f7508ef36e804bc55af224b9fab.tar.gz advent-of-code-229f1057468e6f7508ef36e804bc55af224b9fab.zip |
optimize day 12
Diffstat (limited to 'src/graph.rs')
-rw-r--r-- | src/graph.rs | 8 |
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) { |