for x in range(m): if y == source[1] and x == source[0]: node = Node(destination[1], destination[0], x, y, 0, option) node.val = 0 queue.insert(node) node_dict.update({(x, y): node}) elif maze[y][x] != 0: node = Node(destination[1], destination[0], x, y, infinity, option) queue.insert(node) node_dict.update({(x, y): node}) is_visited = [[False for x in range(m)] for y in range(n)] while True: node = queue.extract_min() is_visited[node.y][node.x] = True if node == node_dict[(m - 1, n - 1)]: break adj = get_adjacency(node) for point in adj: if is_visited[point[1]][point[0]]: continue p = node_dict[point] if node.val + 1 < p.val: p.parent = node p.val = node.val + 1 queue.decrease_key(p, p.val + p.distance) arr = []
def _next_step(self, open_nodes: Fheap): to_close = open_nodes.extract_min() self._close_node(to_close.x, to_close.y, open_nodes) return to_close