目录

题目描述

输入

输出

输入样例:

输出样例:

代码:

前言:

总结:


题目描述

给出一个N*N的迷宫矩阵示意图,从起点[0,0]出发,寻找路径到达终点[N-1, N-1]

要求使用堆栈对象来实现,具体算法参考课本3.2.4节51页

输入

第一行输入t,表示有t个迷宫

第二行输入n,表示第一个迷宫有n行n列

第三行起,输入迷宫每一行的每个方格的状态,0表示可通过,1表示不可通过

输入n行

以此类推输入下一个迷宫

输出

逐个输出迷宫的路径

如果迷宫不存在路径,则输出no path并回车

如果迷宫存在路径,将路径中每个方格的x和y坐标输出,从起点到终点,每输出四个方格就换行,最终以单词END结尾,具体格式参考示范数据

输入样例:

2
8
0 0 0 1 1 1 1 1
1 0 0 0 1 0 0 1
1 0 0 0 1 0 0 0
1 1 0 0 0 0 0 1
0 0 1 1 0 1 1 0
0 0 0 0 0 0 1 1
1 1 1 1 1 0 0 1
0 0 0 0 1 0 0 0
7
0 0 0 1 1 1 1
1 0 0 1 0 0 1
1 0 0 1 0 0 0
1 1 0 0 0 0 1
0 0 1 1 0 1 0
1 0 0 0 0 1 0
0 0 0 0 1 1 0

输出样例:

[0,0]--[0,1]--[0,2]--[1,2]--
[1,3]--[2,3]--[3,3]--[3,4]--
[4,4]--[5,4]--[5,5]--[6,5]--
[6,6]--[7,6]--[7,7]--END
no path

代码:

#include<iostream>
#include<stack>
using namespace std;typedef struct {int i; //当前方块的行号int j; //当前方块的列号int di; //di是下一可走相邻方位的方位号,即di=0、1、2、3
} Box; //定义方块类型int main()
{int t;cin >> t;while (t--){int n, i, j, f = 0;//f作为是否找到迷宫路径的标志stack <Box> s;cin >> n;int** mg=new int *[n];for (i = 0; i < n; i++)mg[i] = new int[n];for (i = 0; i < n; i++)for (j = 0; j < n; j++)cin >> mg[i][j];i = 0; j = 0;Box b = { i,j,-1 }, p;s.push(b);   //入口入栈mg[i][j] = -1;while (!s.empty()){p = s.top();//取出栈顶if (p.i == n-1 && p.j == n-1)//找到迷宫路径并输出{stack<Box>ss;//临时栈,为了正序输出while (!s.empty()){ss.push(s.top());s.pop();}int k = 0;while (!ss.empty()){cout << '[' << ss.top().i << ',' << ss.top().j << "]--";if (++k % 4 == 0)cout << endl;ss.pop();}cout <<"END"<< endl;f = 1;break;}while (++s.top().di < 4)//此循环可持续到找到出口{i = s.top().i; j = s.top().j;switch (s.top().di){case 0:j++; break;case 1:i++; break;case 2:j--; break;case 3:i--; break;}if (i<n&&i>=0&&j<n&&j>=0&&mg[i][j] == 0)//未出界且下一个方块为可通方块{Box bb = { i,j,-1 };s.push(bb);mg[i][j] = -1;}if (i == n-1 && j == n - 1)//找到迷宫路径,跳出循环break;}if(s.top().di==4)//没有找到(i,j,di)的任何一个相邻可走方块s.pop();}if (f == 0)//没有找到迷宫路径cout << "no path" << endl;}return 0;
}

前言:

学C++刷的题,浅浅记录一下

总结:

这道题是课本《数据结构(C语言本)》里的,代码也是根据书里的教程写的,毫无技巧

DS堆栈--迷宫求解(数据结构C语言版)相关推荐

  1. 数据结构c语言版第16页,数据结构c语言版

    数据结构c语言版[编辑] 概述 <数据结构C语言版>本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的各种实现方法及综合分析比较 出版信息 ...

  2. 数据结构c语言版第四章题库,数据结构(C语言版)(第4版)习题

    数据结构(C语言版)(第4版)习题 习题 11.1 选择题.(1)计算机识别.存储和加工处理的对象统称为 .A.数据 B.数据元素 C.数据结构 D.数据类型(2)数据结构通常是研究数据的 及它们之间 ...

  3. 数据结构c语言版朱战立报告,数据结构(C语言版)

    本书是Sedgewick彻底修订和重写的C算法系列的第一本.全书分为四部分,共16章.第一部分"基础知识"(第1-2章)介绍基本算法分析原理.第二部分"数据结构" ...

  4. 数据结构C语言版字符串,数据结构c语言版

    数据结构c语言版是一款非常使用的数据结构课程的编写和教材:它也可将软件作为学习数据结构.算法C程序设计的参数教材,只需要用户学习该软件之后,就算遇到在繁杂的代码也可以清晰的写出来,本书的钱半部分主要介 ...

  5. 数据结构C语言版:魔术师发牌问题

    数据结构C语言版:魔术师发牌问题 故事背景 一位魔术师掏出一叠扑克牌,魔术师取出其中13张黑桃,洗好后,把牌面朝下.说:"我不看牌,只数一数就能知道每张牌是什么?"魔术师口中念一, ...

  6. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

  7. 为什么C语言是非形式化的,《数据结构C语言版》——绪论

    <数据结构C语言版>--绪论<笔记> 一.基本概念和术语 1.数据,数据元素, 数据项,数据对象 数据:是客观事物的符号表示,是所有能够输入到计算机中并被计算机程序处理的符号的 ...

  8. C语言中链表的英文名字,数据结构C语言版 循环链表表示和实现(国外英文).doc

    数据结构C语言版 循环链表表示和实现(国外英文) 数据结构C语言版 循环链表表示和实现(国外英文资料) Data structure, C language, circular list repres ...

  9. 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)

    2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...

  10. c语言打印树形图形,数据结构C语言版树形结构.ppt

    数据结构C语言版树形结构 St中元素 算法执行的操作 ch AC k=2 , AC 建立E结点,因k=1,将其作为C结点的左孩子结点 E AC C结点进栈,k=1 ( A 建立C结点,因k=2,将其作 ...

最新文章

  1. vb excel 整行删除_6个Excel表格制作技巧,熟练掌握工作效率加倍,再也不用加班...
  2. make的使用和Makefile规则和编程及其基本命令(简单)
  3. Missing the OpenSSL lib
  4. 在以下说法错误的是_外行人对翡翠有哪些错误认知?行家给你最精准的答案
  5. Sublime Text 4.0 4102 安装插件的问题
  6. 爷青结?诺基亚贝尔实验室官宣转让Plan 9版权!
  7. Navicat for Mysql 的使用
  8. 自动化接口用例从 1 到 1000 过程中的实践和思考
  9. 黑客帝国屏保源码!快拿去试试吧!炫酷无比!
  10. Q学习(Q-learning)入门小例子及python实现
  11. linux 修改文件类型
  12. 计算机cpu的字母,笔记本计算机CPU型号后缀字母HQ,U,Y的详细说明
  13. bilibili执行董事陈睿:我在进B站之前是一个正常人
  14. 【WebGIS实例】(1)MapboxGL绘制端点有符号的线
  15. 少儿Python视频课程A级简介
  16. 业务需求、用户需求、功能需求、非功能需求
  17. [大话设计模式C++版] 第17章 在NBA我需要翻译 —— 适配器模式
  18. java葱_Java程序设计_网课答案
  19. Arduino - DIY自动浇花系统(土壤湿度传感器+水泵)
  20. 苹果iPad2充不上电的问题

热门文章

  1. mysql or 索引失效_MySQL索引失效的几种情况详析
  2. 软件测试中80/20原则
  3. python之urlencode(),quote()及unquote()
  4. JSON_EXTRACT JSON_UNQUOTE以及json数组下标选择
  5. C/C++编辑器Source Insight技巧收集
  6. 汽车零部件智能工厂MES生产进度管理系统
  7. sql,linq,lamd比较使用
  8. 做正确的事永远都不迟
  9. Macbook二三事
  10. %date:~0,4%和 %time:~0,2%字符截取操作用法