Учитывая матрицу MxN, где каждый элемент может быть 'o', 's' или 'g' ( 's' и 'g' уникальны. Только одна начальная точка и одна конечная точка ),
Предположим, что начальная ячейка 's' всегда находится в (0,0).
Мы хотим найти кратчайшее расстояние от начальной ячейки 's' до целевой клетки 'g', избегаяпрепятствие «о».
Пример:
['s', ' ', ' ', ' ', ' ']
[' ', ' ', 'o', 'o', 'o']
['o', ' ', 'o', ' ', ' ']
[' ', ' ', ' ', 'o', ' ']
[' ', ' ', ' ', 'g', ' ']
Кратчайшее расстояние от 's' до 'g' равно 7.
Я понимаю, что мы можем легко решить эту проблему, используя widthпервый поиск или алгоритм хадлока .Однако мне было трудно понять, почему мой первый глубинный поиск не сработал .
Я пишу на Python, и мой код выглядит следующим образом.
class Solution:
:type maze: list of list
:type start: tuple
:type end: tuple
:rtype: int
def findShortestDistance(self, maze, start, end):
self.shortest=math.inf
#set the default value of visited to be False
self.visited=defaultdict(lambda: False)
self.maze=maze
self.rows=len(maze)
self.cols=len(maze[0])
self.depthFirstSearch(0,0,0)
return self.shortest
def depthFirstSearch(self, i, j, numStep):
if i<0 or j<0 or i>=self.rows or j>=self.cols:
return
elif self.maze[i][j]=='o':
return
elif self.maze[i][j]=='g':
self.shortest=min(self.shortest,numStep)
return
elif self.visited[(i,j)]:
return
self.visited[(i,j)]=True
self.depthFirstSearch(i-1,j,numStep+1)
self.depthFirstSearch(i,j-1,numStep+1)
self.depthFirstSearch(i,j+1,numStep+1)
self.depthFirstSearch(i+1,j,numStep+1)
self.visited[(i,j)]=False
Я искренне не понимаю, почему это не сработает, но я не смог пройти несколько скрытых тестовых случаев для вопроса.
Кроме того, кто-нибудь может сказать время выполнения этого алгоритма?Это кажется мне экспоненциальным.