用c语言编写一个迷宫,C语言实现迷宫
新建stack.h
#include Data.h
#ifndef _STACK_H
#定义_堆栈_H
#定义初始大小10
#定义初始化增量10
typedef struct _STACK{
ElemType * Base
ElemType * Top
(同Internationalorganizations)国际组织大小;
}栈;
STACK * init STACK();
void销毁堆栈(STACK * s);
//压栈
int Push(STACK* s,elem type * e);
//弹栈
int Pop(STACK* s,elem type * e);
//站是否为空
int IsEmpty(STACK * s);
# endif新建stack.c
#include stack.h
#包含标准库
STACK* InitStack(){
STACK * s=(STACK *)malloc(sizeof(STACK));
if (s==NULL){
退出(0);
}
s-Base=(elem type *)malloc(INIT _ SIZE * sizeof(elem type));
if (s- Base==NULL){
免费(s基);
免费;
退出(0);
}
s-Top=s-Base;
s-SIZE=INIT _ SIZE;
返回s;
}
无效销毁堆栈(堆栈)
免费(s基);
免费;
}
int Push(STACK* s,ElemType *e){
if (s==NULL e==NULL){
返回0;
}
if (s- Top - s- Base=s- size){
s-Base=(elem type *)realloc(s-Base,(s-size INIT _ INCREM)* sizeof(elem type));
if (s- Base==NULL){
返回0;
}
s-Top=s-Base s-size;
s-size=s-size INIT _ INCREM;
}
* s-Top=* e;
s-Top;
返回1;
}
int Pop(STACK* s,ElemType* e){
if (s==NULL e==NULL){
返回0;
}
if (s- Base==s- Top){
返回0;
}
s-Top-;
* e=* s-Top;
返回1;
}
int IsEmpty(STACK* s){
返回s- Base==s- Top?1 : 0;
}新建Data.h
#ifndef _DATA_H
#定义数据H
数据类型说明结构
{
int y;
int x;
}位置
数据类型说明结构{
(同Internationalorganizations)国际组织顺序;
刷卡机座位;
int di
}元素类型
#endif新建主网站
#include Data.h
#include stack.h
#包含标准视频
#包含conio.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}
};
静态常量位置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
开关(di){
案例0:
p。x-;//向左
打破;
案例1:
p.y//向下
打破;
案例二:
p.x//向右
打破;
案例三:
p。y-;//向上
打破;
}
返回p;
}
作废打印项目(POS CurP){
int i,j;
系统(“cls”);
for(I=0;i 10i ){
for(j=0;j 10j ){
if(i==CurP.y j==CurP.x){
printf(“@”);
继续;
}
if(item[i][j]==1){
printf( * );
}否则{
printf(" ");
}
}
printf( \ n );
}
}
void main(){
STACK * s=init STACK();
elem型;
int setp=1;
POS CurPos=inPos
打印项目(inPos);
做{
if(IsPass(CurPos)){
e.ord=setp
e。di=0;
e.seat=CurPos
推(s,e);//只有能通过才压栈
项目[curpos。y][curpos。x]=2;
if(curpos。y==outpos。y curpos。x==outpos。x){
打印项目(CurPos);
printf(好!\ n’);
打破;
}
打印项目(CurPos);
CurPos=NextPos(e.seat,0);
设定步骤
getch();
}否则{
Pop(s,e);//如果不能通过就弹栈
if(e.di==4!IsEmpty)){
项目[curpos。y][curpos。x]=8;
Pop(s,e);
}
if(e.di 3){
e.di
推(s,e);
CurPos=NextPos(e.seat,e . di);
}
}
}while(!IsEmpty(s));
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。