【问题描述】以一个 m×n 的长方阵表示迷宫0 和1分别表示迷宫中的通路和障碍。利用C++设计一个程序对任意设定的迷宫求出一条从入口到出口的通路或得出没有通路的结论。要求实现以下功能:1以链表作存储结构的栈类型编写一个求解迷宫的非递归程序。求得的通路以 ij 的形式按通路顺序输出其中ij 为迷宫中的一个坐标。2求得迷宫中所有可能的通路并输出最短路径。实验报告需要包含以下内容:1 描述程序中所用的算
算法描述:
- 定义一个栈,用来存储迷宫的通路坐标。
- 从迷宫的入口开始,将入口坐标入栈。
- 循环执行以下步骤:
1)若栈为空,则迷宫中没有通路,结束循环。
2)取出栈顶元素,记为当前坐标。
3)若当前坐标为出口,则找到了通路,结束循环。
4)判断当前坐标的上、下、左、右四个相邻坐标的情况:
- 若相邻坐标为通路且未访问过,则将其入栈,并标记为已访问。 5)若四个相邻坐标均不满足条件,则将当前坐标出栈。
- 若找到了通路,则将栈中的坐标按顺序输出即可。
最短路径算法描述:
- 定义一个队列,用来存储迷宫的通路路径。
- 从迷宫的入口开始,将入口坐标入队列。
- 循环执行以下步骤:
1)若队列为空,则迷宫中没有通路,结束循环。
2)取出队首元素,记为当前路径。
3)判断当前路径的最后一个坐标是否为出口:
- 若是,则找到了一条通路,结束循环。 4)判断当前路径的最后一个坐标的上、下、左、右四个相邻坐标的情况:
- 若相邻坐标为通路且未访问过,则将其加入当前路径,并标记为已访问。 5)将当前路径的所有相邻坐标入队列。
- 若找到了通路,则输出该通路路径。
最短路径算法思想: 利用广度优先搜索算法,从入口开始,逐层搜索迷宫中的通路,直到找到出口。在搜索的过程中,用队列保存每一条路径,保证先搜索到的路径一定是最短的。当找到出口时,即可输出最短路径。
实验结果:
- 若迷宫中存在通路,则输出一条通路的坐标序列。
- 若迷宫中不存在通路,则输出无通路的结论。
- 若迷宫中存在多条通路,则输出最短路径的坐标序列
原文地址: http://www.cveoy.top/t/topic/iT7h 著作权归作者所有。请勿转载和采集!