新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-5-27
- 最后登录
- 1970-1-1
|
第一题follow up是不是所有的0一起做BFS?
- from collections import deque
- class Solution(object):
- # Do BFS for all one's
- def minDist(self, matrix):
- def bfs(i, j, matrix):
- directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
- queue = deque([(i, j, 0)])
- visited = set()
- while queue:
- pi, pj, depth = queue.popleft()
- for di, dj in directions:
- ni, nj = pi + di, pj + dj
- if 0 <= ni < len(matrix) and 0 <= nj < len(matrix[0]) and (ni, nj) not in visited:
- visited |= {(ni, nj)}
- if matrix[ni][nj] == 0:
- matrix[i][j] = depth + 1
- return
- queue.append((ni, nj, depth + 1))
- for i in range(len(matrix)):
- for j in range(len(matrix[0])):
- if matrix[i][j] == 1:
- bfs(i, j, matrix)
- return matrix
- def minDistFollowUp(self, matrix):
- queue = deque([])
- directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]
- for i in range(len(matrix)):
- for j in range(len(matrix[0])):
- if matrix[i][j] == 1:
- matrix[i][j] = -1
- for i in range(len(matrix)):
- for j in range(len(matrix[0])):
- if matrix[i][j] == 0:
- queue.append((i, j))
- while queue:
- i, j = queue.popleft()
- for di, dj in directions:
- ni, nj = i + di, j + dj
- if 0 <= ni < len(matrix) and 0 <= nj < len(matrix[0]) and matrix[ni][nj] == -1:
- matrix[ni][nj] = matrix[i][j] + 1
- queue.append((ni, nj))
- return matrix
- solver = Solution()
- m = [[0,1,0,0,1], [1,1,1,0,0], [1,1,0,0,1],[0,0,1,0,1]]
- print m
- print solver.minDist(m)
- print solver.minDistFollowUp(m)
复制代码 |
|