def solve(world, goalInWorld): solution = GridWorld(world.width, world.height) # print(solution.cells) solution.cells = [Cell(cell) for cell in world.cells] # print(solution.cells) goal = solution.get(goalInWorld.col, goalInWorld.line) goal.cost = 0 closed = [] opened = [goal] # reopen = 0 while len(opened): # print(enigmaAsStr(solution, goal)) # print("opened:", [(c.col, c.line) for c in opened]) cell = opened.pop() closed.append(cell) # for adj in solution.getAdjacentCells(cell): for adj in solution.getAccessibleCells(cell): # print("cell", cell, "has got a adj", adj) if adj.reachable: # we ignore obstacles direction = Direction.fromTo(adj, cell) cost = cell.cost + direction.cost() if adj.cost == -1: # or adj.cost > cost: # if not used yet adj.direction = direction adj.cost = cost opened.append(adj) if adj.cost > cost: # if not used yet # reopen += 1 # print("reopen", reopen) adj.direction = direction adj.cost = cost opened.append(adj) return solution