首页 >> 大全

【数据结构】c语言基于堆栈实现回溯法自动走迷宫

2023-11-05 大全 28 作者:考证青年

迷宫坐标用二维数组表示,此外还需要一个当前坐标缓冲区,表示当前位置,我使用的是b[3]数组,第三个空间用来表示这个格子被走了几次


#include "stdafx.h"
#include
#include
using namespace std;#define MAXSIZE 100
#define ERROR 0
#define OK 1typedef char Elemtype;//这里修改数组的数据类型
typedef int Status;/*算法描述:1.每个格子都按照右上左右的顺序检查下一步要走的格子2.b数组存放当前信息,0表示x坐标1表示y坐标,2表示走过该格子的次数3.若检测到该格子可以走并且没走过则入栈并且走上这个格子4.假如遇到了思路不能走了就退栈返回原来的道路重新寻找新的道路5.一开始就设定一个胜利坐标,假如走到了这个胜利坐标就算胜利
*//*堆栈测试成功*/
//栈数据结构
//我们规定top指向栈顶元素,bottom为空,当top==bottom的时候栈空
typedef struct Stack {int coord[MAXSIZE][3];  //0表示x坐标,1表示y坐标,2表示走过这个格子的次数int top, bottom;        //这里bottom和top赋初值为-1,这样就可以从0开始填入数据
}*st;//初始化堆栈并且把数组元素都变为0,top和bottom赋初值为-1
Status init_s(st s) {for (int i = 0; i < MAXSIZE; i++) {for (int j = 0; j < 3; j++) {s->coord[i][j] = 0;}}s->top = s->bottom = -1;return OK;
}//判断栈是不是为空栈,如果是空栈返回0,否则返回1
Status empty(st s) {if (s->top == s->bottom) {return ERROR;//栈空}else {return OK;}
}//入栈操作
//先top++然后写入数据
//c数组用来存储当前可以写入的坐标
Status push(st s, int c[3]) {s->top++;if (s->top >= MAXSIZE) {cout << "栈满,已经不可以继续让里面添加元素了" << endl;s->top--;return ERROR;}cout << "三个值分别是:";for (int i = 0; i < 3; i++) {s->coord[s->top][i] = c[i];cout << c[i];}return OK;
}//出栈操作
//先弹出top指向的元素,然后top--
//b数组用来存储当前位置的xy和行走次数
Status pop(st s,int b[3]) {if (empty(s) == 0) {//如果栈空的话就不能弹栈cout << "栈空,无法弹出" << endl;return ERROR;}else {//出栈操作,把退出的坐标赋值给当前坐标数组for (int i = 0; i < 3; i++) {b[i] = s->coord[s->top][i];}s->top--;return OK;}
}
//显示堆栈所有内容
void test(st s) {int t = s->top;cout << "堆栈里面的内容如下:" << endl;cout << "x,y" << endl;while (t != -1) {cout << s->coord[t][0] << "," << s->coord[t][1]<走出了迷宫!!" << endl;return 0;
}

ds堆栈迷宫求解_堆栈实现迷宫_

基本思路就是以一定的顺序检查上下左右格子是否可以走,如果可以走的话,就把之前的一步压入堆栈中,当遇到无路可走的情况的时候,就退栈然后继续检查有没有可以走的路,知道走出迷宫为止,如果没有可以走出迷宫的路的话,栈会被弹空然后没有可以走的路了。最后调试的结果如下:

ds堆栈迷宫求解_堆栈实现迷宫_

ds堆栈迷宫求解_堆栈实现迷宫_

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了