题目:原题链接(中等)
标签:广度优先搜索、深度优先搜索
解法  | 时间复杂度  | 空间复杂度  | 执行用时  | 
Ans 1 (Python)  | O ( N )  | O ( N )  | 184ms (12.29%)  | 
Ans 2 (Python)  | |||
Ans 3 (Python)  | 
解法一:
class Solution:
    def __init__(self):
        self.maze = []
    def hasPath(self, maze: List[List[int]], start: List[int], destination: List[int]) -> bool:
        self.maze = maze
        start, destination = tuple(start), tuple(destination)
        visited = {start}
        queue = collections.deque([start])
        while queue:
            print(queue)
            now = queue.popleft()
            for next in self.move(now):
                if next == destination:
                    return True
                if next not in visited:
                    queue.append(next)
                    visited.add(next)
        return False
    def move(self, start):
        res = []
        # 向上移动
        v1 = start[0]
        for i in range(start[0] - 1, -1, -1):
            if self.maze[i][start[1]] == 0:
                v1 = i
            else:
                break
        if v1 != start[0]:
            res.append((v1, start[1]))
        # 向下移动
        v2 = start[0]
        for i in range(start[0] + 1, len(self.maze), 1):
            if self.maze[i][start[1]] == 0:
                v2 = i
            else:
                break
        if v2 != start[0]:
            res.append((v2, start[1]))
        # 向左移动
        v3 = start[1]
        for j in range(start[1] - 1, -1, -1):
            if self.maze[start[0]][j] == 0:
                v3 = j
            else:
                break
        if v3 != start[1]:
            res.append((start[0], v3))
        # 向右移动
        v4 = start[1]
        for j in range(start[1] + 1, len(self.maze[0]), 1):
            if self.maze[start[0]][j] == 0:
                v4 = j
            else:
                break
        if v4 != start[1]:
            res.append((start[0], v4))
        # print("MOVE:", start, "->", res, "(", v1, v2, v3, v4, ")")
        return res









