1 class Solution(object): 2 def __init__(self): 3 self.List = list() 4 5 def bfs(self,R,C,S,V): 6 T = list() 7 while len(S) >0: 8 node = S.pop(0) 9 if node[0]-1>=0 and V[node[0]-1][node[1]] == 0:10 V[node[0]-1][node[1]] = 111 T.append([node[0]-1,node[1]])12 self.List.append([node[0]-1,node[1]])13 if node[0]+1=0 and V[node[0]][node[1]-1] == 0:18 V[node[0]][node[1]-1] = 119 T.append([node[0],node[1]-1])20 self.List.append([node[0],node[1]-1])21 if node[1]+1 0:26 self.bfs(R,C,T,V)27 28 29 30 def allCellsDistOrder(self, R: int, C: int, r0: int, c0: int) -> 'List[List[int]]':31 stack = list()32 visited = [[0 for col in range(C)] for row in range(R)]33 stack.append([r0,c0])34 visited[r0][c0] = 135 self.List.append([r0,c0])36 self.bfs(R,C,stack,visited)37 return self.List
典型的BFS算法,每一“层”都比前一层的距离多1,因此按层遍历的顺序,即为所求。