From b70c00eb8df3c0c8eea19e7d4aeafdeb7b30bef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Gia=20Phong?= Date: Wed, 9 Oct 2019 17:20:57 +0700 Subject: [PATCH] Unnest the queue used for path finding --- brutalmaze/maze.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/brutalmaze/maze.py b/brutalmaze/maze.py index e140753..f04b7da 100644 --- a/brutalmaze/maze.py +++ b/brutalmaze/maze.py @@ -460,31 +460,22 @@ class Maze: self.stepx = self.stepy = 0 return True - # Forest Fire algorithm with step count - queue = [[(self.destx, self.desty)]] - visited, count, distance = set(), 1, 0 - while count: - if not queue[distance]: distance += 1 - x, y = queue[distance].pop() - count -= 1 + # Forest Fire algorithm + queue, visited = deque([(self.destx, self.desty)]), set() + while queue: + x, y = queue.pop() if (x, y) not in visited: visited.add((x, y)) else: continue - dx, dy = MIDDLE - x, MIDDLE - y if dx**2 + dy**2 <= 2: + # Succeeded on finding a path self.stepx, self.stepy = dx, dy return False for i, j in around(x, y): if self.map[i][j] == EMPTY and check(i, j): - try: - queue[distance + 1].append((i, j)) - except IndexError: - queue.append([(i, j)]) - finally: - count += 1 - + queue.appendleft((i, j)) # Failed to find way to move to target self.stepx = self.stepy = 0 return True