Для начала нужно инициировать сетку:
from GridWithWeights import GridWithWeights
grid = GridWithWeights(WITH, HEIGHT)
Координаты барьера задаются так:
grid.walls = [(1, 1), (2, 1), (3, 1), (3, 3)]
Далее нажно задать координаты начальной и конечной точки для поиска пути:
start, finish = (1, 4), (4, 0)
Функция a_star_search возвращает конечный путь, который получится в итоге.
from functions import a_star_search
came_from = a_star_search(grid, start, finish)
print(came_from)
# output:
# {(4, 0): None, (4, 1): (4, 0), (3, 0): (4, 0), (2, 0): (3, 0), (1, 0): (2, 0), (0, 0): (1, 0), (4, 2): (4, 1),
# (4, 3): (4, 2), (3, 2): (4, 2), (2, 2): (3, 2), (2, 3): (2, 2), (1, 2): (2, 2), (0, 2): (1, 2), (1, 3): (1, 2),
# (1, 4): (1, 3), (0, 3): (1, 3)}
Далее Функция draw_grid отрисовывает полученные данные (несколько примеров с разными стилями отрисовки):
from functions import draw_grid, reconstruct_path
draw_grid(grid, width=3, point_to=came_from, start=start, finish=finish)
print()
draw_grid(grid, width=3, number=cost_so_far, start=start, finish=finish)
print()
draw_grid(grid, width=3, path=reconstruct_path(came_from, start=start, finish=finish), start=start, finish=finish)
# output:
'''
. . . . B
. # # # v
> v < < <
> v < # ^
> A < < <
. . . . B
. # # # 6
3 2 3 4 5
2 1 2 # 6
1 A 1 2 3
. . . . B
. # # # *
. * * * *
. * . # .
. A . . .
'''