原文地址 zhuanlan.zhihu.com
用栈解决迷宫问题-Go语言
问题描述
以上是一个迷宫,我们要从右上角的入口走到左下角的出口。现在要设计一个程序输出可走的路线,如果无法到达出口则输出不能。
问题分析
对于以上的迷宫图我们要用一个二维数组进行模拟:
1 | const N, M = 8, 8 // 迷宫大小 |
首先要声明一个位置向量结构体:
1 | type pos struct { |
这里如果不存放指向dir
的话我们很难知道当前位置点的哪些方向都遍历过了。
然后我们要针对这种位置向量设计一个栈:
1 | // 位置向量栈 |
迷宫的路径搜索
graph TD A(创建路径栈和相关临时变量) --> B[初始位置向量入栈,并标记标记地图] -->C C{判断是否为空栈} -->|No|I{是否到达终点} I -->|Yes| K(输出路线) I -->|No| D[朝四个方向依次进行遍历] D --> E{是否找到可走路线} -->|Yes| F[记录可走方向,该可走的位置向量入栈] E -->|No|G[无路可走,所以当前栈顶位置向量出栈并撤回标记] F --> C G --> C C ----->|Yes| H(该迷宫行不通)
1 | // 迷宫路径搜索 |
完整代码
1 | package main |