95 lines
2.1 KiB
Python
95 lines
2.1 KiB
Python
fio = open("maze.txt", "r")
|
|
|
|
maze_raw = fio.readlines()
|
|
|
|
fio.close()
|
|
|
|
xmax = len(maze_raw) - 1
|
|
ymax = len(maze_raw[0].strip()) - 1
|
|
|
|
maze = {}
|
|
sol = {}
|
|
for x in range(len(maze_raw)):
|
|
for y in range(len(maze_raw[x].strip())):
|
|
paths = set()
|
|
|
|
if x > 0:
|
|
if maze_raw[x - 1][y] == " ":
|
|
paths.add((x - 1, y))
|
|
|
|
if y > 0:
|
|
if maze_raw[x][y - 1] == " ":
|
|
paths.add((x, y - 1))
|
|
|
|
if maze_raw[x][y] == " ":
|
|
paths.add((x, y))
|
|
|
|
if y < ymax:
|
|
if maze_raw[x][y + 1] == " ":
|
|
paths.add((x, y + 1))
|
|
|
|
if x < xmax:
|
|
if maze_raw[x + 1][y] == " ":
|
|
paths.add((x + 1, y))
|
|
|
|
if len(paths) != 0:
|
|
maze[(x,y)] = paths
|
|
|
|
if maze_raw[x][y] == "*":
|
|
sol[(x,y)] = "*"
|
|
else:
|
|
sol[(x,y)] = "?"
|
|
|
|
for key in maze:
|
|
if key[0] == 0:
|
|
if maze_raw[key[0]][key[1]] == " ":
|
|
sol[key] = "N"
|
|
|
|
if key[0] == xmax:
|
|
if maze_raw[key[0]][key[1]] == " ":
|
|
sol[key] = "S"
|
|
|
|
if key[1] == 0:
|
|
if maze_raw[key[0]][key[1]] == " ":
|
|
sol[key] = "W"
|
|
|
|
if key[1] == ymax:
|
|
if maze_raw[key[0]][key[1]] == " ":
|
|
sol[key] = "E"
|
|
|
|
cont = True
|
|
|
|
def check(xi, yi):
|
|
global sol
|
|
return (xi, yi) in sol and sol[xi, yi] != "?" and sol[xi, yi] != "*"
|
|
|
|
while cont:
|
|
cont = False
|
|
for key in maze:
|
|
if sol[key] == "?":
|
|
if check(key[0] - 1, key[1]):
|
|
sol[key] = "N"
|
|
cont = True
|
|
continue
|
|
|
|
if check(key[0] + 1, key[1]):
|
|
sol[key] = "S"
|
|
cont = True
|
|
continue
|
|
|
|
if check(key[0], key[1] - 1):
|
|
sol[key] = "W"
|
|
cont = True
|
|
continue
|
|
|
|
if check(key[0], key[1] + 1):
|
|
sol[key] = "E"
|
|
cont = True
|
|
continue
|
|
|
|
|
|
for x in range(xmax+1):
|
|
for y in range(ymax+1):
|
|
print(sol[(x,y)],end="")
|
|
|
|
print() |