Day 12, Part 2!
This commit is contained in:
parent
d38ba1dd25
commit
a81545a012
1 changed files with 16 additions and 6 deletions
|
@ -57,7 +57,7 @@ impl PartialOrd for State {
|
||||||
|
|
||||||
/// An implemetation of Dijkstra's algorithm to find the shortest path from start to end and return
|
/// An implemetation of Dijkstra's algorithm to find the shortest path from start to end and return
|
||||||
/// its length.
|
/// its length.
|
||||||
fn find_length_of_shortest_path(squares: &Vec<Square>, start: usize, end: usize) -> u32 {
|
fn find_length_of_shortest_path(squares: &Vec<Square>, start: usize, end: usize) -> Option<u32> {
|
||||||
let mut distances: Vec<_> = (0..squares.len()).map(|_| u32::MAX).collect();
|
let mut distances: Vec<_> = (0..squares.len()).map(|_| u32::MAX).collect();
|
||||||
let mut heap = BinaryHeap::new();
|
let mut heap = BinaryHeap::new();
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ fn find_length_of_shortest_path(squares: &Vec<Square>, start: usize, end: usize)
|
||||||
|
|
||||||
while let Some(State { node, cost }) = heap.pop() {
|
while let Some(State { node, cost }) = heap.pop() {
|
||||||
if node == end {
|
if node == end {
|
||||||
return cost;
|
return Some(cost);
|
||||||
}
|
}
|
||||||
|
|
||||||
if cost > distances[node] {
|
if cost > distances[node] {
|
||||||
|
@ -91,7 +91,7 @@ fn find_length_of_shortest_path(squares: &Vec<Square>, start: usize, end: usize)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
0
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -159,8 +159,18 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dbg!(&squares);
|
let length_of_shortest_path = find_length_of_shortest_path(&squares, start, end).unwrap();
|
||||||
|
|
||||||
let length_of_shortest_path = find_length_of_shortest_path(&squares, start, end);
|
|
||||||
println!("Part 1: length of shortest path to location with best signal: {length_of_shortest_path}");
|
println!("Part 1: length of shortest path to location with best signal: {length_of_shortest_path}");
|
||||||
|
|
||||||
|
let mut paths_from_all_a_squares: Vec<(usize, u32)> = squares
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.filter(|(_, sq)| sq.elevation() == 0)
|
||||||
|
.map(|(i, _)| (i, find_length_of_shortest_path(&squares, i, end)))
|
||||||
|
.filter(|(_, distance)| distance.is_some())
|
||||||
|
.map(|(i, distance)| (i, distance.unwrap()))
|
||||||
|
.collect();
|
||||||
|
paths_from_all_a_squares.sort_by(|a, b| b.1.cmp(&a.1));
|
||||||
|
|
||||||
|
dbg!(&paths_from_all_a_squares.last());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue