Комментарии 1
Было бы неплохо увидеть визуализацию каждого из шагов, т.к. не смотря на заверения автора об интуитивно понятности оно очень неинтуитивно шаффлит порядок нод в графе.
Ну, и код местами оставляет желать лучшего. check можно улучшить посчитатав все потенциальные точки сразу и просто пробежаться по ним циклом с проверкой.
def check(i,j, a,b):
def is_in_bound(x,y):
return x >= 0 and y >=0
def is_used(x,y):
return self.used[x][y] == 1
neighbours = [
(i-1, j-1), (i-1, j), (i-1, j+1),
(i , j-1), (i , j+1),
(i+1, j-1), (i+1, j), (i+1, j+1),
]
count = 0
for (x,y) in neighbours:
if is_used(x,y) and is_in_bound(x,y):
count += 1
if i == a: ... # остальные проверки
return count <= 1есть шанс что я попутал x и y местами, но код все равно для демонстрации. второй набор проверок a и b по идее тоже можно в цикле сразу проверить.
Проверка границ по идее должна учитывать ширину и высоту графа, то бишь i+1 и j+1 оказаывались меньше m и n, но почему-то не делает этого, поэтому в моём примере также проверяется только нижняя граница.
Оно несколько похоже на origin shift, но тот хоть и детерминированный, но предлагает гонять алгоритм примерно 10*m*n чтобы получать нормальный лабиринт.

Генерация лабиринтов с использованием алгоритма Recursive backtracker