修水县城乡建设局网站,网站发帖做业务,国外做枪视频网站,常见的网络营销方法满意答案qiniy8084512014.01.06采纳率#xff1a;40% 等级#xff1a;13已帮助#xff1a;8084人原来也做过#xff0c;以下是写的源代码#xff0c;里面有部分注释#xff0c;应该能看懂#xff0c;可以运行。总结的话#xff0c;把代码写进去#xff0c;再随便弄…满意答案qiniy8084512014.01.06采纳率40% 等级13已帮助8084人原来也做过以下是写的源代码里面有部分注释应该能看懂可以运行。总结的话把代码写进去再随便弄几句心得说几句好好学C应该就OK了吧#include#include#define M 15#define N 15struct mark //定义迷宫内点的坐标类型{int x;int y;};struct Element //恋栈元素嘿嘿。。{int x,y; //x行,y列int d; //d下一步的方向};typedef struct LStack //链栈{Element elem;struct LStack *next;}*PLStack;/*************栈函数****************/int InitStack(PLStack S)//构造空栈{SNULL;return 1;}int StackEmpty(PLStack S)//判断栈是否为空{if(SNULL)return 1;elsereturn 0;}int Push(PLStack S, Element e)//压入新数据元素{PLStack p;p(PLStack)malloc(sizeof(LStack));p-eleme;p-nextS;Sp;return 1;}int Pop(PLStack S,Element e) //栈顶元素出栈{PLStack p;if(!StackEmpty(S)){eS-elem;pS;SS-next;free(p);return 1;}elsereturn 0;}/***************求迷宫路径函数***********************/void MazePath(struct mark start,struct mark end,int maze[M][N],int diradd[4][2]){int i,j,d;int a,b;Element elem,e;PLStack S1, S2;InitStack(S1);InitStack(S2);maze[start.x][start.y]2; //入口点作上标记elem.xstart.x;elem.ystart.y;elem.d-1; //开始为-1Push(S1,elem);while(!StackEmpty(S1)) //栈不为空 有路径可走{Pop(S1,elem);ielem.x;jelem.y;delem.d1; //下一个方向while(d4) //试探东南西北各个方向{aidiradd[d][0];bjdiradd[d][1];if(aend.x bend.y maze[a][b]0) //如果到了出口{elem.xi;elem.yj;elem.dd;Push(S1,elem);elem.xa;elem.yb;elem.d886; //方向输出为-1 判断是否到了出口Push(S1,elem);printf(\n0东 1南 2西 3北 886为则走出迷宫\n\n通路为:(行坐标,列坐标,方向)\n);while(S1) //逆置序列 并输出迷宫路径序列{Pop(S1,e);Push(S2,e);}while(S2){Pop(S2,e);printf(--(%d,%d,%d),e.x,e.y,e.d);}return; //跳出两层循环本来用break,但发现出错exit又会结束程序选用return还是不错滴o(∩_∩)o...}if(maze[a][b]0) //找到可以前进的非出口的点{maze[a][b]2; //标记走过此点elem.xi;elem.yj;elem.dd;Push(S1,elem); //当前位置入栈ia; //下一点转化为当前点jb;d-1;}d;}}printf(没有找到可以走出此迷宫的路径\n);}/*************建立迷宫*******************/void initmaze(int maze[M][N]){int i,j;int m,n; //迷宫行,列printf(请输入迷宫的行数 m);scanf(%d,m);printf(请输入迷宫的列数 n);scanf(%d,n);printf(\n请输入迷宫的各行各列:\n用空格隔开,0代表路,1代表墙\n,m,n);for(i1;im;i)for(j1;jn;j)scanf(%d,maze[i][j]);printf(你建立的迷宫为o(∩_∩)o...\n);for(i0;im1;i) //加一圈围墙{maze[i][0]1;maze[i][n1]1;}for(j0;jn1;j){maze[0][j]1;maze[m1][j]1;}for(i0;im1;i) //输出迷宫{for(j0;jn1;j)printf(%d ,maze[i][j]);printf(\n);}}void main(){int sto[M][N];struct mark start,end; //start,end入口和出口的坐标int add[4][2]{{0,1},{1,0},{0,-1},{-1,0}};//行增量和列增量 方向依次为东西南北initmaze(sto);//建立迷宫printf(输入入口的横坐标,纵坐标[逗号隔开]\n);scanf(%d,%d,start.x,start.y);printf(输入出口的横坐标,纵坐标[逗号隔开]\n);scanf(%d,%d,end.x,end.y);MazePath(start,end,sto,add); //find pathsystem(PAUSE);}00分享举报