利用顺序栈实现数据结构中的迷宫求解问题
首先初始化一个二维数组vector<vector<int>>,将障碍物标记为-1,为走过的点标记为0,走过的点标记为1
从入口地址开始,依次按上下左右四个方向寻找是否有可以通行的点,如果有,则将该点的坐标位置入栈,并将该点标记为1,以重复走以走过的点,如果四个方向均未找到可以通行的点,则出栈,直到找到有可以通行的点,重复此过程,最后入栈的坐标位置等于出口位置时,结束此过程,并倒序输出栈中的路径点。
算法实现过程如下:
#include "stdafx.h"
#include <iostream>
#include<vector>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 20
using namespace std;
typedef struct elemStruct
{
int x;//点的x坐标
int y;//点的y坐标
//int flag;//点表示,-1代表障碍物,1代表已走过的点,0代表未走过的点
}Elem;
typedef struct stack
{
Elem *top;//栈顶指针
Elem *base;//栈底指针
int size;//栈当前容量
}sqStack;
//初始化栈
void InitStack(sqStack *&S)
{
//构造一个空栈
S = (sqStack*)malloc(sizeof(sqStack));
S->base = S->top = NULL;
S->size = 0;
S->base = (Elem *)malloc(sizeof(Elem)*STACK_INIT_SIZE);
if (!S->base)
{
cout << "内存分配失败!" << endl;
exit(OVERFLOW);
}
else {
S->top = S->base;
S->size = STACK_INIT_SIZE;
}
}
//判断栈是否为空
bool isEmptyStack(sqStack *S)
{
if (S->base == S->top)
{
return true;
}
else
{
ret