Cut Off Trees for Golf Event
Input:
[
[1,2,3],
[0,0,4],
[7,6,5]
]
Output: 6Input:
[
[1,2,3],
[0,0,0],
[7,6,5]
]
Output: -1Last updated
Input:
[
[1,2,3],
[0,0,4],
[7,6,5]
]
Output: 6Input:
[
[1,2,3],
[0,0,0],
[7,6,5]
]
Output: -1Last updated
Input:
[
[2,3,4],
[0,0,5],
[8,7,6]
]
Output: 6
Explanation: You started from the point (0,0) and you can cut off the tree in (0,0) directly without walking.class Solution:
def cutOffTree(self, forest: List[List[int]]) -> int:
if not forest or not forest[0]:
return 0
d = [-1,0,1,0,-1]
n,m = len(forest),len(forest[0])
heap = sorted([(forest[i][j] ,i,j) for i in range(n) for j in range(m) if forest[i][j] > 1])
#heapq.heapify(heap)
def bfs(s1,s2,d1,d2):
if s1==d1 and s2==d2:
return 0
q = [(s1,s2)]
cnt = 0
visited = {(s1,s2)}
while q:
size = len(q)
cnt +=1
for i in range(size):
a,b = q.pop(0)
for nx,ny in [(a+d[i],b+d[i+1]) for i in range(4)]:
if 0<=nx<n and 0<=ny<m and forest[nx][ny] >=1 and (nx,ny) not in visited:
visited.add((nx,ny))
if nx == d1 and ny == d2:
return cnt
q.append((nx,ny))
return -1
res = 0
x,y = 0,0
for _, i,j in heap:
# = heapq.heappop(heap)
temp = bfs(x,y,i,j)
if temp < 0:
return -1
res += temp
x,y = i,j
return res