
python
class Solution(object):
def hasPath(self, maze, start, destination):
"""
:type maze: List[List[int]]
:type start: List[int]
:type destination: List[int]
:rtype: bool
"""
#dfs
m,n=len(maze),len(maze[0])
visit=[[0 for _ in range(n)] for _ in range(m)]
return self.dfs(maze,visit,start,destination)
def dfs(self,maze,visit,start,destination):
i,j=start[0],start[1]
if visit[i][j]==1 or maze[i][j]==1:
return False
if destination==start:
return True
visit[i][j]=1
pos=[(0,1),(0,-1),(-1,0),(1,0)]
for item in pos:
i,j=start[0],start[1]
while 0<=i+item[0]<len(maze) and 0<=j+item[1]<len(maze[0]) and maze[i+item[0]][j+item[1]]==0:
i,j=i+item[0],j+item[1]
if self.dfs(maze,visit,[i,j],destination):
return True
return False

经过不用改visit,碰壁了改
python
class Solution(object):
def hasPath(self, maze, start, destination):
"""
:type maze: List[List[int]]
:type start: List[int]
:type destination: List[int]
:rtype: bool
"""
#bfs
m,n=len(maze),len(maze[0])
visit=[[0 for _ in range(n)] for _ in range(m)]
q=[(start[0],start[1])]
visit[start[0]][start[1]]=1
return self.bfs(maze,q,visit,destination)
def bfs(self,maze,q,visit,destination):
while q:
cur=q.pop(0)
# cur=[row,col]
if destination[0]==cur[0] and destination[1]==cur[1]:
return True
# visit[cur[0]][cur[1]]=1
pos=[(0,1),(0,-1),(1,0),(-1,0)]
for item in pos:
i,j=cur[0],cur[1]
while i+item[0]>=0 and i+item[0]<len(maze) and j+item[1]>=0 and j+item[1]<len(maze[0]) and maze[i+item[0]][j+item[1]]==0:
i+=item[0]
j+=item[1]
if visit[i][j]==0:
q.append([i,j])
visit[i][j]=1
return False
# #dfs
# m,n=len(maze),len(maze[0])
# visit=[[0 for _ in range(n)] for _ in range(m)]
# return self.dfs(maze,visit,start,destination)
# def dfs(self,maze,visit,start,destination):
# i,j=start[0],start[1]
# if visit[i][j]==1 or maze[i][j]==1:
# return False
# if destination==start:
# return True
# visit[i][j]=1
# pos=[(0,1),(0,-1),(-1,0),(1,0)]
# for item in pos:
# i,j=start[0],start[1]
# while 0<=i+item[0]<len(maze) and 0<=j+item[1]<len(maze[0]) and maze[i+item[0]][j+item[1]]==0:
# i,j=i+item[0],j+item[1]
# if self.dfs(maze,visit,[i,j],destination):
# return True
# return False