新建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. Opencv获取导入DNN模型的各层信息
  2. OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别
  3. Winform中使用NPOI实现导出Excel并文件另存为
  4. VMware 虚拟机克隆 CentOS 6.5 之后,网络配置问题的解决方案
  5. JAVA单例模式 关于延迟加载问题
  6. MVC之Ajax如影随行
  7. SqlServer两表之间:根据一个表的字段更新另一个表的字段
  8. “5G 时代,手机或被淘汰”
  9. 2019-01-01T00:00:00.000Z 这种时间日期类型格式是属于:格林尼治时间
  10. 计算机网络谢希仁第七版课后习题答案(第七章)
  11. Android APK签名工具
  12. excel联系导入到手机通讯录(小米手机)
  13. java调用百度翻译_Java调用百度API实现翻译-Go语言中文社区
  14. Google翻译API使用案例
  15. 青龙面板 Bot配置教程
  16. 51单片机实现独立按键控制LED灯
  17. 【JavaScript】关于手机中的触摸手势操作实现过程详解
  18. 利用 javax.xml.datatype.Duration 解析 activiti:dueDate=P1DT3H 这种时间格式
  19. ECC与数论、数论史、代数,二次剩余符号的程序计算,高次剩余,高斯和 2013-03-23 21:52:49
  20. php 自动注册变量,phpwind放自动注册方法

热门文章

  1. 常见电子元器件失效概率统计
  2. .sh文件无法运行--权限问题
  3. 关于os.system和os.popen的坑
  4. python pandas 条件求和_python 使用pandas计算累积求和的方法
  5. Catia 开始界面
  6. 云时代,运维面临的挑战与机遇
  7. revit二次开发——初谈开发
  8. 李宏毅深度强化学习(国语)课程(2018) 笔记(一)Policy Gradient (Review)
  9. C语言之杨辉三角小游戏
  10. ThinkPade570 U盘启动重装系统