您的位置:首页 > 财经 > 金融 > 台州网站制作咨询薇_开虚拟机很伤电脑吗_齐三seo顾问_实时积分榜

台州网站制作咨询薇_开虚拟机很伤电脑吗_齐三seo顾问_实时积分榜

2024/11/16 22:31:42 来源:https://blog.csdn.net/m0_66925868/article/details/143057253  浏览:    关键词:台州网站制作咨询薇_开虚拟机很伤电脑吗_齐三seo顾问_实时积分榜
台州网站制作咨询薇_开虚拟机很伤电脑吗_齐三seo顾问_实时积分榜

文章目录

    • 迷宫问题
      • 栈解决——深度优先——回溯法
      • 队列解决——广度优先

迷宫问题

栈解决——深度优先——回溯法

""""""
"""
规定每次按照某种的方式前进
每次前进都将节点的位置存入栈,这样栈中就存放着走过的路线
当不能再继续前进时:后退出栈,直到可以用另一条路可以前进
"""maze = [[0, 1, 0, 0, 0],[0, 1, 0, 1, 0],[0, 0, 0, 1, 0],[0, 1, 1, 1, 0],[0, 0, 0, 0, 0]
]# 前进方式
dirs = [lambda x, y: (x - 1, y),lambda x, y: (x, y + 1),lambda x, y: (x + 1, y),lambda x, y: (x, y - 1),
]def solve(x1, y1, x2, y2):stack = []stack.append((x1, y1))while len(stack):current_node = stack[-1]if current_node[0] == x2 and current_node[1] == y2:for i in stack:print(i)return Truefor dir in dirs:next_node = dir(*current_node)if 0 <= next_node[0] < len(maze) and 0 <= next_node[1] < len(maze[0]):if maze[next_node[0]][next_node[1]] == 0:stack.append(next_node)maze[next_node[0]][next_node[1]] = 2breakelse:maze[next_node[0]][next_node[1]] = 2stack.pop()else:print('没有通路')return Falsesolve(0, 0, 4, 4)

队列解决——广度优先

""""""
"""
思想:
多条路径同时前进,第一个到达的就是最短路径
通过记录每个节点的上一个节点的位置实现
实现:
一个列表记录此时到达的全部位置(多条路线同时进行就有多个位置),再一个列表所有已经到过的节点位置以及每个节点的上一个位置
"""from collections import dequemaze = [[0, 1, 0, 0, 0],[0, 1, 0, 1, 0],[0, 0, 0, 1, 0],[0, 1, 1, 1, 0],[0, 0, 0, 0, 0]
]# 前进方式
dirs = [lambda x, y: (x - 1, y),lambda x, y: (x, y + 1),lambda x, y: (x + 1, y),lambda x, y: (x, y - 1),
]def print_r(path):real_path = []real_item_index = len(path) - 1  # real_item:通路上的元素(最开始一定是path的最后一个元素)while real_item_index >= 0:real_path.append(path[real_item_index][0:2])real_item_index = path[real_item_index][2]real_path.reverse()for node in real_path:print(node)def solve(x1, y1, x2, y2):q = deque()path = []q.append((x1, y1, -1))while len(q) > 0:current_node = q.popleft()path.append(current_node)if current_node[0] == x2 and current_node[1] == y2:# 到达终点,通过path逐层向前找到完整路径print_r(path)return Truefor dir in dirs:next_node = dir(current_node[0], current_node[1])if 0 <= next_node[0] < len(maze) and 0 <= next_node[1] < len(maze[0]):if maze[next_node[0]][next_node[1]] == 0:q.append((next_node[0], next_node[1], len(path) - 1))maze[next_node[0]][next_node[1]] = 2else:print('未找到通路')return Falsesolve(0, 0, 4, 4)

若有错误与不足请指出,关注DPT一起进步吧!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com