我有以下代码:
import queue
def createMaze1():
maze = []
maze.append(["#", "#", "#", "#", "#", "O", "#", "#", "#"])
maze.append(["#", " ", " ", " ", " ", " ", " ", " ", "#"])
maze.append(["#", " ", "#", "#", " ", "#", "#", " ", "#"])
maze.append(["#", " ", "#", " ", " ", " ", "#", " ", "#"])
maze.append(["#", " ", "#", " ", "#", " ", "#", " ", "#"])
maze.append(["#", " ", "#", " ", "#", " ", "#", " ", "#"])
maze.append(["#", " ", "#", " ", "#", " ", "#", "#", "#"])
maze.append(["#", " ", " ", " ", " ", " ", " ", " ", "#"])
maze.append(["#", "#", "#", "#", "#", "#", "#", "X", "#"])
return maze
def valid(maze, moves):
for x, pos in enumerate(maze[0]):
if pos == "O":
start = x
break
i = start
j = 0
for move in moves:
if move == "L": i -= 1
if move == "R": i += 1
if move == "U": j -= 1
if move == "D": j += 1
if not(0 <= i < len(maze[0]) and 0 <= j < len(maze[0])): return False
elif maze[j][i] == "#": return False
return True
def find_end(maze, moves):
for x, pos in enumerate(maze[0]):
if pos == "O":
start = x
break
i = start
j = 0
for move in moves:
if move == "L": i -= 1
if move == "R": i += 1
if move == "U": j -= 1
if move == "D": j += 1
if maze[j][i] == "X":
print("Found " + moves)
return True
print("Not found...")
return False
maze = createMaze1()
q = queue.Queue()
q.put("")
add = ""
while not find_end(maze, add):
add = q.get()
for i in ["L", "R", "U", "D"]:
put = add + i
if valid(maze, put):
q.put(put)
它在迷宫中搜索从O(起点)到X(终点)的路径。它可以成功做到这一点。
当我可以确定没有从O到X的路径时,我想停止算法。我必须运行循环几次才能做到这一点?
如果有人可以修改我的某些代码,我将不胜感激。 另外,有没有学习图论的更有效方法呢?