одна строка дзен python (введите import this
в терминале python) равна
Простое лучше, чем сложное.
Ваш пытаясь сделать глубину сначала поиск. Поиск в глубину - это рекурсивный алгоритм. Как правило, вы можете реализовать рекурсивный алгоритм двумя способами: процедурным и рекурсивным.
процедурный путь, на мой взгляд, более сложен, но часто имеет лучшую производительность и менее ограничен памятью, чем рекурсивный способ.
рекурсивный способ в python по моему опыту проще читать и писать. но он более ограничен памятью процедурным способом.
потому что, глядя на небольшую глубину из 4 шагов, я думаю, что проще использовать рекурсивный подход.
Ваша реализация иногда использует точки ((x, y)
), а иногда значения (1
). Ваша реализация будет проще, если вы будете использовать точки для построения пути, а затем создадите новый путь, в котором будут храниться значения вместо точек, когда вы будете готовы к возвращению.
создание соседних точек (next_x, next_y) в вашем алгоритме. я бы поставил эту часть в отдельную функцию.
def neigbours(x, y, rows, cols):
for rel_x, rel_y in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
next_x, next_y = x + rel_x, y + rel_y
if 0 <= next_x < rows and 0 <= next_y < cols:
yield next_x, next_y
# so that you can do the following
rows, cols = 3, 5
x, y = 0, 0
for next_x, next_y in neigbours(x, y, rows, cols):
print(next_x, next_y)
# output
0 1
1 0