Added Day 15 Part 2
This commit is contained in:
parent
b1cef38c7a
commit
3276d198ce
25
src/main.rs
25
src/main.rs
|
@ -18,19 +18,26 @@ fn parse_input(input: &'static str) -> Vec<Vec<u8>> {
|
||||||
fn solution(grid: Vec<Vec<u8>>) -> u64 {
|
fn solution(grid: Vec<Vec<u8>>) -> u64 {
|
||||||
let m = grid.len();
|
let m = grid.len();
|
||||||
let n = grid[0].len();
|
let n = grid[0].len();
|
||||||
let mut visited = vec![vec![false; n]; m];
|
let (tm, tn) = (m * 5, n * 5);
|
||||||
|
|
||||||
let mut heap = BinaryHeap::with_capacity(m * n);
|
let mut visited = vec![vec![false; tn]; tm];
|
||||||
|
|
||||||
|
let mut heap = BinaryHeap::with_capacity(tm * tn);
|
||||||
heap.push((Reverse(0), 0i32, 0i32));
|
heap.push((Reverse(0), 0i32, 0i32));
|
||||||
|
|
||||||
while let Some((Reverse(cost), x, y)) = heap.pop() {
|
while let Some((Reverse(cost), x, y)) = heap.pop() {
|
||||||
if visited[x as usize][y as usize] {
|
if let Some(v) = visited
|
||||||
continue;
|
.get_mut(x as usize)
|
||||||
} else {
|
.and_then(|row| row.get_mut(y as usize))
|
||||||
visited[x as usize][y as usize] = true;
|
{
|
||||||
|
if *v {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
*v = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if x == m as i32 - 1 && y == n as i32 - 1 {
|
if x == tm as i32 - 1 && y == tn as i32 - 1 {
|
||||||
return cost;
|
return cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,8 +47,8 @@ fn solution(grid: Vec<Vec<u8>>) -> u64 {
|
||||||
|
|
||||||
if px < 0
|
if px < 0
|
||||||
|| py < 0
|
|| py < 0
|
||||||
|| px >= m as i32
|
|| px >= tm as i32
|
||||||
|| py >= n as i32
|
|| py >= tn as i32
|
||||||
|| visited[px as usize][py as usize]
|
|| visited[px as usize][py as usize]
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue