栈的基本操作+实例:迷宫求解

#include<iostream>
using namespace std;struct Node {int datai;int dataj;Node* next;
};
//栈
struct Stack {Node* pTop; //顶部指针Node* pBottom; //底部指针
};
void Init(Stack* pS);//初始化
//void CreateStack(Stack* pS);//建栈
void Push(Stack* pS, int vali, int valj);//压栈
bool Pop(Stack* pS);//出栈:把栈顶的结点删掉
bool getTop(Stack* pS, int& vali, int& valj);//获得栈顶元素:但不删除栈顶结点
bool isEmpty(Stack* pS);//判断栈顶是否为空
int getSize(Stack* pS);//获取栈的长度
void Travers(Stack* pS);//遍历栈
int main() {Stack s;int i = 0, j = 0;//定义迷宫矩阵int a[10][10] = {  0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,0,//第五行0,1,1,1,0,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0, };//输出矩阵/*for (i = 0; i < 10; i++) {for (j = 0; j < 10; j++) {cout << a0[i][j] << " ";//a0[i*columns+j]等价于a0[i][j]}cout << endl;}return 0;*/Init(&s);Push(&s, 1, 1);i = 1; j = 1;//起点//四个方向,从右开始顺时针while (i != 8 || j != 8) {//四个方向,从右开始顺时针if (a[i+1][j] == 0) {if (a[i][j + 1] == 0) {if (a[i - 1][j] == 0) {if (a[i][j - 1] == 0) {a[i][j] = 0; Pop(&s); getTop(&s, i, j);}else { j--; Push(&s, i, j); a[i][j] = 0;}}else { i--; Push(&s, i, j); a[i][j] = 0;}}else { j++; Push(&s, i, j); a[i][j] = 0;}}else { i++; Push(&s, i, j); a[i][j] = 0;}}// Travers(&s);//新建一个栈接受已压好的栈用以逆序输出栈Stack r;Init(&r);for  (int n = 0;  n < getSize(&s);  i++){getTop(&s,i,j);Pop(&s);Push(&r, i, j);}Travers(&r);}
//初始化void Init(Stack * pS){pS->pTop = new Node();if (pS->pTop == NULL) {cerr << "动态内存分配失败!" << endl;exit(1);}pS->pBottom = pS->pTop;//顶部指针和底部指针指向同一个位置pS->pTop->next = NULL;
}
//建栈
/*void CreateStack(Stack* pS) {int val;cout << "请输入各个元素值:" << endl;while (cin >> val && val != -1){Push(pS, val);}
}*/
//压栈
void Push(Stack* pS, int vali,int valj) {Node* newNode = new Node();//新建结点if (newNode == NULL) {cerr << "动态内存分配失败" << endl;exit(1);}newNode->datai = vali;newNode->dataj = valj;newNode->next = pS->pTop;pS->pTop = newNode;
}
//遍历栈
void Travers(Stack* pS) {Node* p = pS->pTop;while (p!=pS->pBottom){cout << '('<<p->datai + 1<<','<<p->dataj + 1 <<')'<< "—>";p = p->next;}cout << endl;
}
//判断栈是否为空:通过比较栈顶和栈尾是否相等,如相等,说明为空
bool isEmpty(Stack* pS) {if (pS->pTop == pS->pBottom)return true;return false;
}
//出栈:把栈顶的结点删掉
bool Pop(Stack* pS) {if (isEmpty(pS))return false;Node* r = pS->pTop;//暂存顶指针pS->pTop = r->next;//栈顶指针下移一个结点delete r;//释放空间r = NULL;return true;
}
//获取栈顶元素:但不删除栈顶结点
bool getTop(Stack* pS, int& vali,int& valj) {if (isEmpty(pS))return false;vali = pS->pTop->datai;valj = pS->pTop->dataj;return true;
}
//获取栈的长度
int getSize(Stack* pS) {int len = 0;Node* p = pS->pTop;while (p != pS->pBottom) {len++;p = p->next;}return len;
}

c++:栈的基本操作+实例:迷宫求解相关推荐

  1. java使用链栈实现迷宫求解

    java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html java实现链栈的代码: package stackapplicatio ...

  2. 栈-迷宫求解路径问题

    //迷宫问题,暴力求解#include"stdio.h"#include"Stack.c"#define MAX_SIZE 100 //迷宫最大规格是100x1 ...

  3. 栈的应用--迷宫求解

    栈的应用–迷宫求解 思路: 从一个起点(1,1)坐标开始, 依次判断它的右,下,左,上, 方位能不能走 如果能就直接走, 每走一步将这个位置的坐标入栈, 并且标记为2, 若都不能走, 说明走到死路了, ...

  4. java迷宫算法栈_java - 用Java创建迷宫求解算法 - 堆栈内存溢出

    我被分配了在Java中创建迷宫求解器的任务. 这是作业: Write an application that finds a path through a maze. The maze should ...

  5. 迷宫求解【穷举求解法】

    迷宫求解是一个理解数据结构中栈的比较好的实践例子,下面进行分析 设迷宫是又一个2维数组组成的,元素只有0或1来表示是否通路,0代表通路,1代表有墙壁不通路 例如下图中是一条通路 穷举法:从入口出发,顺 ...

  6. 《数据结构实践》设计报告---迷宫求解

    <数据结构实践>设计报告-迷宫求解 因为学校要求答辩结课,给了很多题目都不太会,决定把感兴趣的都做一做,在这存档备用. 课程设计题目:迷宫求解 课程设计主要内容和要求: 一.设计目的: 1 ...

  7. c语言迷宫问题输出坐标,C语言数据结构之迷宫求解问题

    现在网上各种对于迷宫的求解,版本多的数不胜数.本人小白一枚,贴上自己对迷宫的求解这个小项目,自己写的.望能帮助一些同样有困难的人,毕竟我当时费解了好一会儿时间呢. 首先,先标明对于迷宫求解这个项目,首 ...

  8. 迷宫求解 java_迷宫求解算法(java版)

    迷宫求解算法一直是算法学习的经典,实现自然也是多种多样,包括动态规划,递归等实现,这里我们使用穷举求解,加深对栈的理解和应用 定义Position类用于存储坐标点 起点坐标为(1,1),终点坐标为(8 ...

  9. 迷宫求解(深度优先)

    迷宫求解 问题初始条件: 给定一副地图,一个开始坐标,一个结束坐标,寻找一条可以从开始坐标到结束坐标的路径 问题分析: 可以用栈存储路径的坐标且坐标应有横纵两个属性来对应迷宫二维数组中的位置,此外还需 ...

最新文章

  1. 离线安装Ubuntu虚拟机和GNURadio
  2. 英文Ubuntu安装中文包(locale)的方法
  3. [置顶]LGame框架问题汇总,有疑问请发至此文
  4. 如何使用Android系统属性(SystemProperties)
  5. python支付宝蚂蚁森林_Python教你迅速成为“蚂蚁森林排行榜”第一名
  6. STM8L串口中断进不去
  7. 西宝高速公路模拟java大作业_——访西宝高速公路改扩建项目管理处处长王剑...
  8. 关于微信各名词的英文翻译
  9. openpyxl不能读取xls格式
  10. 设计并实现一个员工(Employee)类(C++)
  11. 携程Java后台开发面经
  12. win10关机后自动重启_电脑自动关机或重启的解决办法
  13. matlab from workplace,关于使用From workspace的问题
  14. CSS内边距和外边距
  15. Android适配器以及作用,Android Studio:自定义Adapter(适配器)的一些通俗易懂的理解(以一个简单的聊天界面为例)...
  16. 程序员啊,他又加班了!
  17. 《黑马》——C++提高编程
  18. 信安软考 第十一章 网络物理隔离技术与应用
  19. 虚部用计算机怎么弄,CASIO这个型号的计算机怎么进行虚数运算
  20. 索尼爱立信st18i基于官方4.0.3再度修改更加顺畅 rom + 刷机教程

热门文章

  1. ProtoBuf使用指南(C++)
  2. CentOs 7.2下ELK日志分析系统搭建
  3. 介绍map.entry接口
  4. 用Ant实现Java项目的自动构建和部署
  5. 进程通信QSharedMemory
  6. js实现购物车数量的增加与减少,js实现购物车数量的自增与自减
  7. Google退出中国 谁最受伤
  8. cudnn v4安装
  9. python字符串截取及Html解析
  10. MapReduce基础开发之十读写ORC File