1751.牛郎织女
牛郎织女 · Cowherd&Weaver
描述
又到了七夕节,牛郎织女相约一起去一个n*m
大小的迷宫maze
里玩耍。然而没过多久,他们就倒霉地走散了。现在给定由.
,*
,S
,T
组成的矩阵maze
,其中.
表示空地,*
表示障碍物,S
表示牛郎的位置 ,T
表示织女的位置,牛郎和织女都会试图寻找对方,不停地在矩阵中走动(他们可以每次向上下左右四个方向移动一格或者站着不动,但是不能走到迷宫外面或者障碍物),请问他们是否有可能重逢?如果有可能,返回True
,否则返回False
。
样例
样例1:
输入:
[
"S..*",
"*.**",
"...T"
]
输出: true
说明:
织女选择不动
牛郎行动路线(0,0)->(0,1)->(1,1)->(2,1)->(2,2)->(2,3)
样例2:
输入:
[
"S..*",
"***.",
"...T"
]
输出: false
说明:
这两个人无论如何和碰不上了
BFS写法
#牛郎织女 class Solution: def function(self, maze): n, m = len(maze), len(maze[0]) for i in range(n): for j in range(m): if (maze[i][j] == 'S'): return self.bfs([[i, j]], maze) #bfs,看是否可以流过去 def bfs(self, queue, maze): directions = [[0, 1], [0, -1], [-1, 0], [1, 0]] visted = [] while queue: pop_num = queue.pop(0) pop_x = pop_num[0] pop_y = pop_num[1] visted.append([pop_x, pop_y]) #边界情况 for direction in directions: new_x = pop_x + direction[0] new_y = pop_y + direction[1] if (new_x < 0 or new_x >= len(maze) or new_y < 0 or new_y >= len(maze[0])): continue if (maze[new_x][new_y] == 'T'): return True if (maze[new_x][new_y] == '.') and [new_x, new_y] not in visted: queue.append([new_x, new_y]) return False result = Solution().function([ "S..*", "***.", "...T" ]) print(result)