本文实例为大家分享了数据结构c语言版迷宫问题栈实现的具体代码,供大家参考,具体内容如下

程序主要参考自严蔚敏老师的数据结构c语言版,在书中程序的大体框架下进行了完善。关于迷宫问题的思路可查阅原书。

#include

using namespace std;

#define MAXSIZE 10

typedef int Status;

typedef struct{

int x;

int y;

}Postype;

typedef struct{

int ord;

Postype seat;

int dir;

}SElemType;//栈的元素类型

typedef struct{

//SElemType data[MAXSIZE];

SElemType* top;

SElemType* base;

}Stack;//栈的结构类型

typedef struct{

char arr[MAXSIZE][MAXSIZE];

}MAZETYPE;//迷宫结构体

MAZETYPE maze;

void InitMaze()

{

maze.arr[0][0] = maze.arr[0][1] = maze.arr[0][2] = maze.arr[0][3] = maze.arr[0][4] = maze.arr[0][5] = maze.arr[0][6] = maze.arr[0][7] = maze.arr[0][8] = maze.arr[0][9] = '1';

maze.arr[1][0] = maze.arr[1][3] = maze.arr[1][7] = maze.arr[1][9] = '1';

maze.arr[1][1] = maze.arr[1][2] = maze.arr[1][4] = maze.arr[1][5] = maze.arr[1][6] = maze.arr[1][8] = '0';

maze.arr[2][0] = maze.arr[2][3] = maze.arr[2][7] = maze.arr[2][9] = '1';

maze.arr[2][1] = maze.arr[2][2] = maze.arr[2][4] = maze.arr[2][5] = maze.arr[2][6] = maze.arr[2][8] = '0';

maze.arr[3][0] = maze.arr[3][5] = maze.arr[3][6] = maze.arr[3][9] = '1';

maze.arr[3][1] = maze.arr[3][2] = maze.arr[3][3] = maze.arr[3][4] = maze.arr[3][7] = maze.arr[3][8] = '0';

maze.arr[4][0] = maze.arr[4][2] = maze.arr[4][3] = maze.arr[4][4] = maze.arr[4][9] = '1';

maze.arr[4][1] = maze.arr[4][5] = maze.arr[4][6] = maze.arr[4][7] = maze.arr[4][8] = '0';

maze.arr[5][0] = maze.arr[5][4] = maze.arr[5][9] = '1';

maze.arr[5][1] = maze.arr[5][2] = maze.arr[5][3] = maze.arr[5][5] = maze.arr[5][6] = maze.arr[5][7] = maze.arr[5][8] = '0';

maze.arr[6][0] = maze.arr[6][2] = maze.arr[6][6] = maze.arr[6][9] = '1';

maze.arr[6][1] = maze.arr[6][3] = maze.arr[6][4] = maze.arr[6][5] = maze.arr[6][7] = maze.arr[6][8] = '0';

maze.arr[7][0] = maze.arr[7][2] = maze.arr[7][3] = maze.arr[7][4] = maze.arr[7][6] = maze.arr[7][9] = '1';

maze.arr[7][1] = maze.arr[7][5] = maze.arr[7][7] = maze.arr[7][8] = '0';

maze.arr[8][0] = maze.arr[8][1] = maze.arr[8][9] = '0';

maze.arr[8][2] = maze.arr[8][3] = maze.arr[8][4] = maze.arr[8][5] = maze.arr[8][6] = maze.arr[8][7] = maze.arr[8][8] = '0';

maze.arr[9][0] = maze.arr[9][1] = maze.arr[9][2] = maze.arr[9][3] = maze.arr[9][4] = maze.arr[9][5] = maze.arr[9][6] = maze.arr[9][7] = maze.arr[9][8] = maze.arr[9][9] = '1';

}

Status initStack(Stack &s)

{

s.base = (SElemType*)malloc(MAXSIZE*sizeof(SElemType));

if (!s.base) return 0;

s.top = s.base;

return 1;

}

void Push(Stack &s, SElemType e)

{

*s.top++ = e;

}

void Pop(Stack &s, SElemType &e)

{

e = *--s.top;

}

Status StackEmpty(Stack &s)

{

if (s.top == s.base) return 1;

else return 0;

}

Status Pass(Postype curpos)

{

if (maze.arr[curpos.x][curpos.y] == '0')

return 1;

else return 0;

}

void Foot(Postype curpos)

{

maze.arr[curpos.x][curpos.y] = '*';

}

void MarkPrint(Postype curpos)

{

maze.arr[curpos.x][curpos.y] = '!';

}

Status StructCmp(Postype a, Postype b)

{

if (a.x = b.x&&a.y == b.y) return 1;

else return 0;

}

//下一个位置

Postype NextPos(Postype CurPos, int Dir)

{

Postype ReturnPos;

switch (Dir)

{

case 1:

ReturnPos.x = CurPos.x;

ReturnPos.y = CurPos.y + 1;

break;

case 2:

ReturnPos.x = CurPos.x + 1;

ReturnPos.y = CurPos.y;

break;

case 3:

ReturnPos.x = CurPos.x;

ReturnPos.y = CurPos.y - 1;

break;

case 4:

ReturnPos.x = CurPos.x - 1;

ReturnPos.y = CurPos.y;

break;

}

return ReturnPos;

}

Status MazePath(Postype start, Postype end)

{

Stack s;

SElemType e;

initStack(s);

Postype curpos = start;

int curstep = 1;

do{

if (Pass(curpos))

{

Foot(curpos);

e = { curstep, curpos, 1 };

Push(s, e);

if (StructCmp(curpos, end)) return 1;

curpos = NextPos(curpos, 1);

curstep++;

}

else

{

if (!StackEmpty(s))

{

Pop(s, e);

while (e.dir ==4 &&!StackEmpty(s))

{

MarkPrint(e.seat); Pop(s, e);

}

if (e.dir < 4 && !StackEmpty(s))

{

e.dir++;

Push(s, e);

curpos = NextPos(e.seat, e.dir);

}

}

}

} while (!StackEmpty(s));

return 0;

}

int main()

{

InitMaze();

Postype s, e;

s.x = s.y = 1;

e.x = e.y = 8;

if (MazePath(s, e))

printf("迷宫成功解密!\n");

else

printf("解密失败\n");

for (int i = 0; i < 10; i++)

{

for (int j = 0; j < 10; j++)

{

printf("%c ", maze.arr[i][j]);

}

printf("\n");

}

cout << "-=================================" << endl;

for (int i = 0; i < 10; i++)

{

for (int j = 0; j < 10; j++)

{

if (maze.arr[i][j] == '*' || maze.arr[i][j] == '!')

printf("%c ", maze.arr[i][j]);

else cout << " ";

}

printf("\n");

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java版数据结构解迷宫问题_C语言数据结构之迷宫问题相关推荐

  1. 数据结构c语言版第一章答案,《c语言数据结构》第一章概论自测题答案

    <<c语言数据结构>第一章概论自测题答案>由会员分享,可在线阅读,更多相关<<c语言数据结构>第一章概论自测题答案(4页珍藏版)>请在人人文库网上搜索. ...

  2. c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  3. c 实现走迷宫流程图_c语言迷宫问题程序功能介绍.设计思路.数据结构设计及用法说明程序结构(流程图).各模块的功能及程序说明....

    满意答案 qiniy808451 2014.01.06 采纳率:40%    等级:13 已帮助:8084人 原来也做过,以下是写的源代码,里面有部分注释,应该能看懂,可以运行.总结的话,把代码写进去 ...

  4. c语言数据结构插入算法说明,C语言数据结构插入算法

    C语言数据结构插入算法 C语言数据结构插入算法 C语言数据结构 数据结构学习 ->是二目运算符 p->a 引用了指针p指向的结构体的成员a. 整合 void unionL(List *La ...

  5. 用JAVA定义两个结构体_c语言struct结构体的定义和使用

    c语言由于不像java,c#,c++等语言有对象,所以就用struct结构体来表示,其实作用是差不多的,下面来快速学习c语言struct结构体的定义和使用,以学生类student来举例,有三种定义方式 ...

  6. java用链表做学生系统_C语言链表实现学生管理系统

    本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下 #include #include #include #include #include #include usin ...

  7. Java用链表写图书管理_C语言链表实现图书管理系统

    之前参照网上的资料用链表实现了图书管理系统,包括简单的增删改查功能以及借书还书功能,我是VC6.0下写的一个控制台程序,格式参照的网上的.在动手编码之前,你需要理清自己的思路.首先,需要确定图书馆里系 ...

  8. java实现兵乓球比赛_C语言实现乒乓球比赛

    本文实例为大家分享了C语言实现乒乓球比赛的具体代码,供大家参考,具体内容如下 1).基本要求 用8个LED发光管(红黄绿)的来回滚动显示来模拟打乒乓球时乒乓球在两边球台上的来回运动.比赛双方用按钮/开 ...

  9. Coin Stack——Java版详解

    题目描述 A and B are playing a collaborative game that involves n stacks of coins, numbered from 1 to n. ...

最新文章

  1. ffmpeg text relocations
  2. docker 每次都得source /etc/profile以及如何查看Docker容器环境变量、向容器传递环境变量
  3. Elasticsearch –使用模式替换过滤器和自定义分析器忽略查询中的特殊字符
  4. python并发编程之多线程
  5. C++ AFX_MANAGE_STATE(AfxGetStaticModuleState())的作用
  6. Linux管道的原子性,管道的原子性 linux写操作原子性
  7. 2009年Silverlight十大流行应用
  8. 高级着色语言HLSL入门(1)
  9. python 判断是字母的多种方法
  10. MySQL数据库学习资料(六)
  11. KND数控系统PLC开发环境
  12. proto_path passed empty directory name. (Use “.“ for current directory.)
  13. “青山依旧在,几度夕阳红” 2021.12.7日晚
  14. extjs6 清除grid中combo列的值
  15. Word 边框刷使用方法
  16. 方舟服务器建家位置,方舟生存进化新手建家图文攻略 方舟生存进化在哪建家比较好-游侠网...
  17. 现在的网站无法访问了,如何访问过去的网站
  18. bbp公式求圆周率、python_【并行计算】六种方法计算圆周率
  19. 第一个panda3d C++程序
  20. IT 大牛们的小传,有点academic风格的说^_^

热门文章

  1. SAP Spartacus Multi-Site Configuration
  2. css 选择器学习笔记
  3. css伪类focus的测试
  4. Angular的HttpClient注入
  5. SAP Hybris Commerce,CRM和C4C的登录语言选择
  6. SAP CRM WebClient UI SSO cookie
  7. One order search dynamic sql statement生成位置
  8. 如何在Marketing Cloud的弹出UI窗口里添加扩展字段
  9. IBASE search
  10. 如何修改PHP项目Language Library版本号