用c语言写一个迷宫程序,知道源码~ ~!

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

#定义M 15

#定义编号15

Struct mark //定义迷宫中点的坐标类型。

{

int x;

int y;

};

Struct元素//“爱”栈元素,呵呵。。

{

int x,y;//x行,Y列

int d;//d下一个方向

};

Typedef结构LStack //链栈

{

元素elem

struct LStack * next

} * PLStack

/* * * * * * * * * * * *堆栈函数* * * * * * * * * * * * * *

int init stack(pl stack & amp;S)//构造一个空堆栈

{

S = NULL

返回1;

}

Int StackEmpty(PLStack S)//确定堆栈是否为空。

{

if(S==NULL)

返回1;

其他

返回0;

}

int Push(pl stack & amp;s,Element e)//按下新的数据元素。

{

pl stack p;

p =(pl stack)malloc(sizeof(LStack));

p->;elem = e;

p->;next = S;

s = p;

返回1;

}

int Pop(pl stack & amp;元素& ampE) //弹出栈顶元素。

{

pl stack p;

如果(!栈顶)

{

e = S-& gt;elem

p = S;

S = S-& gt;接下来;

免费(p);

返回1;

}

其他

返回0;

}

/* * * * * * * * * * * *找到迷宫路径函数* * * * * * * * * * * * * * * * * *

void MazePath(结构标记开始,结构标记结束,int maze[M][N],int diradd[4][2])

{

int i,j,d;int a,b;

元素elem,e;

S2 pl stack s 1;

init stack(s 1);

init stack(S2);

maze[start . x][start . y]= 2;//标记入口点。

elem . x = start . x;

elem . y = start . y;

elem . d =-1;//以-1开头

推送(S1,elem);

而(!StackEmpty(S1)) //堆栈不为空。有一条路要走。

{

Pop(S1,elem);

i = elem.x

j = elem.y

d = elem . d+1;//下一个方向

while(d & lt;4) //探索东南西北东南四面八方。

{

a = I+diradd[d][0];

b = j+diradd[d][1];

if(a = = end . x & amp;& amp& amp& amp迷宫[a][b]==0) //如果你到了出口,

{

elem . x = I;

elem . y = j;

elem.d = d

推送(S1,elem);

elem . x = a;

elem . y = b;

elem.d = 886//方向输出为-1判断是否到达出口。

推送(S1,elem);

Printf("\n0=东1=南2=西3=北886,然后走出迷宫\ n \ n路径为:(行坐标,列坐标,方向)\ n ");

While(S1) //反转序列,输出迷宫路径序列。

{

Pop(S1,e);

推(S2,e);

}

while(S2)

{

波普(S2,e);

printf("-& gt;(%d,%d,%d)",e.x,e.y,e . d);

}

返回;//跳出两层循环,本来用break,但是发现错误,exit会再次结束程序,所以还是选择return好。

}

If(maze[a][b]==0) //找到可以前进的非出口点。

{

迷宫[a][b]= 2;//标记这个点的经过

elem . x = I;

elem . y = j;

elem.d = d

推送(S1,elem);//当前位置是堆叠的。

I = a;//下一个点转换为当前点。

j = b;

d =-1;

}

d++;

}

}

Printf("没有找到走出这个迷宫的路径\ n ");

}

/* * * * * * * * * * * *建造迷宫* * * * * * * * * * * * * *

void int maze(int maze[M][N])

{

int i,j;

int m,n;//迷宫行,列[/M]

Printf("请输入迷宫中的行数m = ");

scanf("%d ",& ampm);

Printf("请输入迷宫中的列数n = ");

scanf("%d ",& ampn);

printf(" \n请输入迷宫的行和列:\ n用空格分隔,0代表路,1代表墙\ n ",m,n);

for(I = 1;我& lt= m;i++)

for(j = 1;j & lt= n;j++)

scanf("%d ",& ampmaze[I][j]);

Printf("你搭建的迷宫是(最外圈是坚固的)...\ n ");

for(I = 0;我& lt= m+1;I++) //添加围栏。

{

迷宫[I][0]= 1;

迷宫[I][n+1]= 1;

}

for(j = 0;j & lt= n+1;j++)

{

迷宫[0][j]= 1;

迷宫[m+1][j]= 1;

}

for(I = 0;我& lt= m+1;I++) //输出迷宫

{

for(j = 0;j & lt= n+1;j++)

printf("%d ",maze[I][j]);

printf(" \ n ");

}

}

void main()

{

int sto[M][N];

结构标记开始、结束;//入口和出口的起点、终点坐标

int add[4][2]={{0,1},{1,0},{0,-1},{-1,0 } };//行增量和列增量的方向是东、西、北、南[/M]

init maze(sto);//建造一个迷宫

Printf("输入入口的横坐标和纵坐标[逗号分隔]\ n ");

scanf("%d,%d ",& ampstart . x & amp;start . y);

Printf("横坐标输入输出,纵坐标[逗号分隔]\ n ");

scanf("%d,%d ",& ampend . x & amp;end . y);

MazePath(start,end,sto,add);//查找路径

系统(“暂停”);

}