There is a task to find a way out of the maze. I tried to implement the wave algorithm ... but I got it clumsy. Please tell me where it can be corrected.
Given the matrix:
labirint = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 1, 1, 1, 1, 0, 1, 1, 1], [1, 0, 1, 1, 0, 0, 0, 1, 1, 1], [1, 0, 1, 1, 0, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 1, 0, 1, 0, 1], [1, 1, 0, 1, 1, 1, 0, 1, 0, 1], [0, 0, 1, 0, 1, 1, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0, 1, 0, 1], [1, 1, 1, 0, 1, 0, 1, 1, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] ] # Координаты входа [2,0], координаты выхода [8,0]. В которой 1 - это стена, 0 - это путь, # Преубразую "стены" в пробелы для удобства labirint111=labirint for y in range(0, len(labirint111)): for x in range(0, len(labirint111[y])): if labirint111[y][x]==1: labirint111[y][x]='' # координаты входа poz=[2,0] y=poz[0] x=poz[1] labirint111[y][x]=1 #присваиваю начальное значение ячейки входа for yy in range(0, len(labirint111)-1): for xx in range(0, len(labirint111[yy])-1):# без еще одного внешнего цикла не доходит до конца for y in range(0, len(labirint111) - 1): for x in range(0, len(labirint111[y]) - 1): if labirint111[y][x] != '': # left if labirint111[y - 1][x] != '' and labirint111[y - 1][x] == 0 and labirint111[y][x] != 0: labirint111[y - 1][x] = int(labirint111[y][x]) + 1 # forward if labirint111[y][x + 1] != '' and labirint111[y][x + 1] == 0 and labirint111[y][x] != 0: labirint111[y][x + 1] = int(labirint111[y][x]) + 1 # right if labirint111[y + 1][x] != '' and labirint111[y + 1][x] == 0 and labirint111[y][x] != 0: labirint111[y + 1][x] = int(labirint111[y][x]) + 1 # back if labirint111[y][x - 1] != '' and labirint111[y][x - 1] == 0 and labirint111[y][x] != 0: labirint111[y][x - 1] = int(labirint111[y][x]) + 1 # возвращаю значение стен равным еденице for y in range(0, len(labirint111)): for x in range(0, len(labirint111[y])): if labirint111[y][x]=='': labirint111[y][x]=1 #вывод результата for y in range(0, len(labirint111)): print(labirint111[y]) The result of the algorithm is:
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] [1, 3, 4, 5, 6, 7, 8, 9, 10, 1] [1, 2, 1, 1, 1, 1, 9, 1, 1, 1] [1, 3, 1, 1, 10, 11, 10, 1, 1, 1] [1, 4, 1, 1, 9, 1, 11, 12, 13, 1] [1, 5, 6, 7, 8, 1, 12, 1, 14, 1] [1, 1, 7, 1, 1, 1, 13, 1, 15, 1] [22, 21, 1, 19, 1, 1, 14, 15, 16, 1] [1, 20, 19, 18, 17, 16, 15, 1, 17, 1] [1, 1, 1, 19, 1, 17, 1, 1, 18, 1] [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] The algorithm finds the output, but the code is very clumsy. Please tell me how you can fix, and whether it is possible that the result is displayed as a path, for example, ['left', 'left', 'right' ....]. Thank.