前两天学习了栈和队列的相关知识,今天来看一下如何用栈来走出迷宫。
先来一个迷宫:0表示墙(不能走),1表示路(能走)为便于观察我将这里可走的路用红色标记一下
前面收到我们要使用栈的相关知识来走出这个迷宫,下面就正式开始来说一说怎么解决迷宫问题。
方法一:使用函数本身的栈。我们都知道调用一个函数时,该函数都会形成自己的函数调用栈,当函数调用结束返回以后,该栈结构就会随之消失,而这里的调用栈的产生和消失我们就刚好可以当做是一个元素的入栈和出栈。
思路:
1、给定一个入口,判断入口点是否能落脚
2、如果不能落脚直接函数返回
3、如果能落脚就将这个点标记一下
4、判断这个点是不是出口
5、是出口说明就找到了一条路
6、不是出口就探测该点周围相邻4个点(探测顺序随意,这里我采用顺时针方向,即上右下左)
7、每探测到一个点就调用函数本身,一旦用新的点调用函数,那么就继续执行步骤1~7
思路有了,现在用代码实现:
maze.c文件
#include <stdio.h>
#include "stack.h"
#define max_row 6
#define max_col 6
#define Test_Header printf("\n==========%s==========\n",__FUNCTION__);
typedef struct Maze
{
int map[max_row][max_col];
}Maze;
//迷宫地图初始化函数
void MazeMapInit(Maze *maze)
{
if(maze == NULL)
{
return;
}
int map[max_row][max_col] =
{
{
0,1,0,0,0,0},
{
0,1,1,1,0,0},
{
0,1,0,1,1,0},
{
1,1,0,0,0,0},
{
0,0,0,0,0,0},
{
0,0,0,0,0,0},
};
int i = 0;
for(;i &l