C/C++

Помогите умоляю сделать алгоритм в кумире

я уже третий час сижу голову ломаю
 нач
лог флаг
флаг := да
нц пока флаг
нц пока справа свободно
если сверху стена и снизу стена
то
закрасить
все
вправо
кц
флаг := нет
нц пока слева свободно
если снизу свободно и не флаг
то
флаг := да
вниз
все
влево
кц
кц
кон
АО
Андрей Обухов
63 090
Лучший ответ
Бекжан Жакыпов что значит лог и флаг?
Бездарность
Андрей Гудков
Андрей Гудков
1 596
импорт heapq

функция heuristic(a, b):
вернуть абс(а[0] - b[0]) + абс(а[1] - b[1])

функция astar(grid, start, end):
open_set = []
heapq.heappush(open_set, (0, start))
came_from = пустой_словарь()
gscore = {start: 0}
fscore = {start: heuristic(start, end)}

пока open_set:
_, current = heapq.heappop(open_set)

если current == end:
path = []
пока current in came_from:
path.append(current)
current = came_from[current]
вернуть path[::-1]

для neighbor из get_neighbors(grid, current):
tentative_gscore = gscore[current] + 1
если neighbor not in gscore или tentative_gscore < gscore[neighbor]:
came_from[neighbor] = current
gscore[neighbor] = tentative_gscore
fscore[neighbor] = tentative_gscore + heuristic(neighbor, end)
heapq.heappush(open_set, (fscore[neighbor], neighbor))

вернуть []

функция get_neighbors(grid, pos):
neighbors = []
для dx, dy из [(1, 0), (-1, 0), (0, 1), (0, -1)]:
new_pos = (pos[0] + dx, pos[1] + dy)
если new_pos[0] >= 0 и new_pos[0] < длина(grid) и new_pos[1] >= 0 и new_pos[1] < длина(grid[0]) и grid[new_pos[0]][new_pos[1]] != 1:
neighbors.append(new_pos)
вернуть neighbors

функция main():
grid = [
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0]
]
start = (0, 0)
end = (4, 0)
path = astar(grid, start, end)
вывести(path)

если __name__ == "__main__":
main()
Бекжан Жакыпов правда что-ли? Кто-то откликнулся на мою просьбу?
Бекжан Жакыпов это что-то не то..