diff --git a/2021/src/day15.rs b/2021/src/day15.rs index 0318ad5..83251a5 100644 --- a/2021/src/day15.rs +++ b/2021/src/day15.rs @@ -71,7 +71,7 @@ impl Map { let mut todo = BinaryHeap::new(); todo.push(Reverse((0, start))); - let mut visited = vec![false; self.data.len()]; + let mut best = vec![u32::MAX; self.data.len()]; let height = self.height() as i32; @@ -80,12 +80,10 @@ impl Map { return distance; } - if visited[self.index(pos)] { + if best[self.index(pos)] < distance { continue; } - visited[self.index(pos)] = true; - let (x, y) = pos; for dy in -1..=1 { @@ -100,12 +98,13 @@ impl Map { let new = (x + dx, y + dy); let index = self.index(new); + let new_distance = distance + self.data[index] as u32; - if visited[index] { + if best[index] <= new_distance { continue; } - let new_distance = distance + self.data[index] as u32; + best[index] = new_distance; todo.push(Reverse((new_distance, new))); }