47 lines
1.0 KiB
Python
47 lines
1.0 KiB
Python
![]() |
#!/usr/bin/env python
|
||
|
|
||
|
density = []
|
||
|
distance = []
|
||
|
|
||
|
def shortes_path(density, distance):
|
||
|
queue = []
|
||
|
queue.append((0,0))
|
||
|
|
||
|
#import pdb; pdb.set_trace()
|
||
|
while(len(queue)):
|
||
|
pos = queue.pop(0)
|
||
|
v = distance[pos[1]][pos[0]]
|
||
|
|
||
|
for move in ((0,1), (0,-1), (1,0), (-1,0)):
|
||
|
move_x = move[0] + pos[0]
|
||
|
move_y = move[1] + pos[1]
|
||
|
|
||
|
if (move_x) < 0:
|
||
|
continue
|
||
|
if (move_y) < 0:
|
||
|
continue
|
||
|
if (move_y) >= len(density):
|
||
|
continue
|
||
|
if (move_x) >= len(density[move_y]):
|
||
|
continue
|
||
|
|
||
|
if distance[move_y][move_x] is None:
|
||
|
distance[move_y][move_x] = v + density[move_y][move_x]
|
||
|
queue.append((move_x, move_y))
|
||
|
continue
|
||
|
|
||
|
if density[move_y][move_x] + v < distance[move_y][move_x]:
|
||
|
distance[move_y][move_x] = v + density[move_y][move_x]
|
||
|
queue.append((move_x, move_y))
|
||
|
continue
|
||
|
|
||
|
with open("input01.txt","r") as f:
|
||
|
for line in f:
|
||
|
density.append([int(i) for i in line.strip()])
|
||
|
distance.append([None]*len(line.strip()))
|
||
|
|
||
|
distance[0][0] = density[0][0]
|
||
|
|
||
|
shortes_path(density,distance)
|
||
|
print(distance[-1][-1]-distance[0][0])
|