Python深度优先搜索(DFS)算法: 生成迷宫及查找所有路径

本文将介绍如何使用Python实现深度优先搜索(DFS)算法来生成随机迷宫,并找到从起点到终点的所有可行路径。

**代码示例:**pythonimport random

设置迷宫大小M = 5N = 5

while True: # 生成迷宫矩阵,1表示墙,0表示通路 maze = [[1 for j in range(N + 2)] for i in range(M + 2)] for i in range(1, M + 1): for j in range(1, N + 1): maze[i][j] = random.randint(0, 1)

# 设置入口和出口    maze[1][1] = 0    maze[M][N] = 0

# 使用DFS搜索判断是否存在通路    visited = set()

def dfs_search(start):        visited.add(start)        if start == (M, N):            return True        for neighbor in adj_list[start]:            if neighbor not in visited:                if dfs_search(neighbor):                    return True        return False

# 建立邻接表    adj_list = {}    for i in range(1, M + 1):        for j in range(1, N + 1):            if maze[i][j] == 1:                continue            neighbors = []            if i > 1 and maze[i - 1][j] == 0:                neighbors.append((i - 1, j))            if i < M and maze[i + 1][j] == 0:                neighbors.append((i + 1, j))            if j > 1 and maze[i][j - 1] == 0:                neighbors.append((i, j - 1))            if j < N and maze[i][j + 1] == 0:                neighbors.append((i, j + 1))            adj_list[(i, j)] = neighbors

# 如果存在通路,跳出循环    if dfs_search((1, 1)):        break

输出迷宫矩阵print('迷宫矩阵:')for i in range(1, M + 1): for j in range(1, N + 1): if maze[i][j] == 0: print('0', end=' ') else: print('1', end=' ') print()

输出邻接表print('

邻接表:')for node, neighbors in adj_list.items(): print(node, '->', neighbors)

使用DFS搜索所有路径def dfs_search_all_paths(start, end, visited=None): if visited is None: visited = set() visited.add(start) if start == end: return [[end]] paths = [] for neighbor in adj_list[start]: if neighbor not in visited: sub_paths = dfs_search_all_paths(neighbor, end, visited) if sub_paths: for sub_path in sub_paths: paths.append(sub_path + [start]) return paths

输出所有路径print('

所有路径:')dfs_all_path = dfs_search_all_paths((1, 1), (M, N))for path in dfs_all_path: path.reverse() print(' -> '.join(str(step) for step in path))

代码讲解:

  1. 生成迷宫: - 随机生成一个二维矩阵,用0表示通路,1表示墙壁。 - 保证入口和出口为通路。2. 建立邻接表: - 遍历迷宫矩阵,将每个节点的相邻通路节点存储在邻接表中。3. DFS搜索判断通路: - 从起点开始,递归地探索所有未访问的相邻节点。 - 如果找到终点,则说明存在通路。4. DFS搜索所有路径: - 与判断通路类似,但会记录所有到达终点的路径。

总结:

本文介绍了如何使用Python实现DFS算法来生成迷宫并查找所有路径。DFS算法在解决迷宫问题、图论问题等方面有着广泛的应用。

Python深度优先搜索(DFS)算法: 生成迷宫及查找所有路径

原文地址: https://www.cveoy.top/t/topic/fYDm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录