新建stack.h

#include "Data.h"
#ifndef _STACK_H
#define _STACK_H
#define INIT_SIZE 10
#define INIT_INCREM 10
typedef struct _STACK{ElemType *Base;ElemType *Top;int size;
} STACK;
STACK* InitStack();
void DestroyStack(STACK* s);
//压栈
int Push(STACK* s, ElemType *e);
//弹栈
int Pop(STACK* s, ElemType* e);
//站是否为空
int IsEmpty(STACK*  s);
#endif;

新建stack.c

#include "stack.h"
#include<stdlib.h>STACK* InitStack(){STACK* s = (STACK*)malloc(sizeof(STACK));if (s == NULL){exit(0);}s->Base = (ElemType*)malloc(INIT_SIZE*sizeof(ElemType));if (s->Base == NULL){free(s->Base);free(s);exit(0);}s->Top = s->Base;s->size = INIT_SIZE;return s;
}void DestroyStack(STACK* s){free(s->Base);free(s);}int Push(STACK* s, ElemType *e){if (s == NULL || e==NULL){return 0;}if (s->Top - s->Base >= s->size){s->Base = (ElemType*)realloc(s->Base, (s->size + INIT_INCREM)*sizeof(ElemType));if (s->Base == NULL){return 0;}s->Top = s->Base + s->size;s->size = s->size + INIT_INCREM;}*s->Top = *e;s->Top++;return 1;
}int Pop(STACK* s, ElemType* e){if (s == NULL || e==NULL){return 0;}if (s->Base == s->Top){return 0;}s->Top--;*e = *s->Top;return 1;
}int IsEmpty(STACK*  s){return s->Base == s->Top ? 1 : 0;
}

新建Data.h

#ifndef _DATA_H
#define _DATA_Htypedef struct{int y;int x;}POS;typedef struct{int ord;POS seat;int di;}ElemType;
#endif

新建main.c

#include "Data.h"
#include "stack.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>int item[10][10]={{1,1,1,1,1,1,1,1,1,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,1,0,0,0,1,0,1},{1,0,0,0,0,1,1,0,0,1},{1,0,1,1,1,0,0,0,0,1},{1,0,0,0,1,0,0,0,0,1},{1,0,1,0,0,0,1,0,0,1},{1,0,1,1,1,0,1,1,0,1},{1,1,0,0,0,0,0,0,0,1},{1,1,1,1,1,1,1,1,1,1}
};static const POS inPos={1,1},outPos={8,8};
int IsPass(POS CurP){return item[CurP.y][CurP.x]==0?1:0;
}POS NextPos(POS CurP,int di){POS p=CurP;switch(di){case 0:p.x--;//向左break;case 1:p.y++;//向下break;case 2:p.x++;//向右break;case 3:p.y--;//向上break;}return p;
}void PrintItem(POS CurP){int i,j;system("cls");for(i=0;i<10;i++){for(j=0;j<10;j++){if(i==CurP.y && j==CurP.x){printf("@");continue;}if(item[i][j]==1){printf("*");}else{printf(" ");}}printf("\n");}
}void main(){STACK* s=InitStack();ElemType e;int setp=1;POS CurPos=inPos;PrintItem(inPos);do{if(IsPass(CurPos)){e.ord=setp;e.di=0;e.seat=CurPos;Push(s,&e);//只有能通过才压栈item[CurPos.y][CurPos.x]=2;if(CurPos.y==outPos.y && CurPos.x==outPos.x){PrintItem(CurPos);printf("ok!\n");break;}PrintItem(CurPos);CurPos=NextPos(e.seat,0);setp++;getch();}else{Pop(s,&e);//如果不能通过就弹栈if(e.di==4 && !IsEmpty(s)){item[CurPos.y][CurPos.x]=8;Pop(s,&e);}if(e.di<3){e.di++;Push(s,&e);CurPos=NextPos(e.seat,e.di);}}}while(!IsEmpty(s));}

c语言通过栈实现小人走迷宫相关推荐

  1. 【C语言小游戏】——老鼠走迷宫

    一.效果图展示 我们来实现一个小游戏,就是老鼠走迷宫,效果图如下所示: 二.数据结构分析 首先,我们先来分析一下数据结构. 1.迷宫地图--它是有一个字符型二维数组并初始化构成的,障碍显示为'#',道 ...

  2. C语言实现小游戏:走迷宫

    走迷宫: 1.定义一个二维数组作为迷宫 2.定义老鼠的坐标 3.获取游戏开始时的时间time(NULL) 4.进入循环 1.system 清理屏幕 2.显示迷宫(遍历二维数组) 3.检查是否走出迷宫 ...

  3. c语言大作业走迷宫,C语言笔记07_小游戏设计——“走迷宫”

    C语言07 小游戏设计--走迷宫 目标: 我们要设计一个完整的小游戏"走迷宫".你将可以通过控制键盘上的"W"."S"."A&qu ...

  4. Bailian3752 走迷宫【BFS】

    3752:走迷宫 总时间限制: 1000ms 内存限制: 65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷宫,求从左上角走到右下角最少 ...

  5. c语言大作业走迷宫,基于C语言实现简单的走迷宫游戏

    本文实例讲述了C语言实现简单的走迷宫游戏的方法,代码完整,便于读者理解. 学数据结构时用"栈"写的一个走迷宫程序,实际上用到双向队列,方便在运行完毕后输出经过的点. #includ ...

  6. C语言实现一个走迷宫小游戏(深度优先算法)

    补充一下,先前文章末尾给出的下载链接的完整代码含有部分C++的语法(使用Dev-C++并且文件扩展名为.cpp的没有影响),如果有的朋友使用的语言标准是VC6的话可能不支持,所以在修改过后再上传一版, ...

  7. SDUT-2449_数据结构实验之栈与队列十:走迷宫

    数据结构实验之栈与队列十:走迷宫 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 一个由n * m 个格子组成的迷宫,起 ...

  8. c语言自动按键脚本,C语言键盘控制走迷宫小游戏

    本文实例为大家分享了C语言键盘控制走迷宫小游戏的具体代码,供大家参考,具体内容如下 在看了<啊哈C语言>之后想写一个游戏demo 游戏的截图 首先是启动界面 然后是初始化 接下来是键盘操控 ...

  9. 老鼠走迷宫php算法,C语言经典算法 - 老鼠走迷官(一)

    C语言经典算法 - 老鼠走迷官(一) 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表 示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下 ...

最新文章

  1. 嵌入式开发有年龄限制吗_2021年考监理工程师有年龄限制吗?女生可以考监理工程师吗?...
  2. golang中的目录操作
  3. 【Let‘s Encrypt】 too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limit
  4. 《系统集成项目管理工程师》必背100个知识点-24变更的常见原因
  5. 华为鸿蒙测试结果,华为鸿蒙OS系统测试结果相继出炉!果然没让花粉们久等:最好的体验...
  6. electron、node
  7. Java EE6装饰器:在注入时装饰类
  8. 论文浅尝 | 基于知识图的问答变分推理
  9. python实时绘图暂停_Python实时绘图
  10. 西威变频器使用说明书_西威变频器调试说明.doc
  11. cs1.6服务器怎么注册,CS服务器登录与管理工具
  12. 新建github分支
  13. TiDB x 中国电信翼支付 | 「效率提升 5 倍」,TiDB 在电信翼支付金融核心场景的应用
  14. 专属微信公众号消息推送(java版)
  15. 第1关:伪分布式环境搭建
  16. php导入excel文件时间,PHPExcel导入Excel文件并对其日期单元格处理的代码示例
  17. php表格增加一行数据,Excel表格如何增加一行
  18. 关于我unity创建2d横版游戏的这件事1
  19. 那些仰望星空的人们,《三体》中看见区块链的未来
  20. java 获取一年后的日期_java 获取一年内的一段日期

热门文章

  1. Linux简明系统维护手册
  2. 联想m10 linux,小巧也商务 联想M10 3G上网本详细评测
  3. web中的数据导入与导出
  4. STM32F103RCT6+JQC-3FF-S-Z5VDC继电器模块控制
  5. 心灵感应和量子力学01------第五维空间
  6. 色差输出 S-Video YUV YCbCr YPvPr RGB VGA WXGA
  7. 英文版Windows10系统显示中文乱码问题解决
  8. 秋招如何抱佛脚?2022最新大厂Java面试真题合集(附权威答案)
  9. cad模糊查询符号_SQL 模糊查询之特殊字符
  10. 雪碧你变了!喝了20多年的雪碧不仅换包装了,连logo也换了