在确定没有路径之前,我需要运行几次搜索算法?

时间:2019-08-20 10:54:36

标签: python graph breadth-first-search graph-traversal

我有以下代码:

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的路径时,我想停止算法。我必须运行循环几次才能做到这一点?

如果有人可以修改我的某些代码,我将不胜感激。 另外,有没有学习图论的更有效方法呢?

0 个答案:

没有答案