您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 数据结构C语言迷宫求解问题(有要求和源代码)
1、迷宫求解设计一个迷宫求解程序,要求如下:以M×N表示长方阵表示迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。能任意设定的迷宫(选作)如果有通路,列出所有通路提示:以一个二维数组来表示迷宫,0和1分别表示迷宫中的通路和障碍,如下图迷宫数据为:1111111111100100010110010001011000011001101110000110001000011010001001101110110111000000011111111111入口位置:11出口位置:88探索过程可采用如下算法,设定当前位置的初值为入口位置;do{若当前位置可通,则{将当前位置插入栈顶;若该位置是出口位置,则结束;否则切换当前位置的东邻方块为新的当前位置;}否则,{若栈不空且栈顶位置尚有其他方向未经探索,则设定新的当前位置为沿顺时针方向旋转找到的栈顶位置的下一相邻块;若栈不空但栈顶位置的四周均不可通,则{删去栈顶位置;//从路径中删去该通道块若栈不空,则重新测试新的栈顶位置,直至找到一个可通的相邻块出栈至栈空;}}}while(栈不空);#includestdio.h#includestring.h#defineMaxSize32inta[30][30];intb[30][30];intm,n;typedefstruct{inti;intj;intdi;}Box;typedefstruct{Boxdata[MaxSize];inttop;}StackType;boolsereach(intX,intY,intX1,intY1);voidmain(){intX,Y,Y1,X1;memset(a,0,sizeof(a));memset(b,0,sizeof(b));//for()printf(请输入迷宫的长度和宽度\n);while(~scanf(%d%d,&m,&n)){printf(请输入迷宫(0表示空地,1表示围墙)\n);for(inti=0;in;i++){for(intj=0;jm;j++){scanf(%d,&a[i][j]);if(a[i][j]==1)b[i][j]=-1;}}printf(请输入迷宫起点的行号和列号\n);scanf(%d%d,&X,&Y);printf(请输入迷宫终点的行号和列号\n);scanf(%d%d,&X1,&Y1);if(!sereach(X,Y,X1,Y1))printf(该迷宫没有解!\n);printf(请输入迷宫的长度和宽度\n);}//return0;}boolsereach(intX,intY,intX1,intY1){StackTypest;inti,j,di,find;st.top=-1;while(a[X][Y]!=0){printf(迷宫起点的行号和列号有错,请重新输入\n);scanf(%d%d,&X,&Y);}if(a[X][Y]==0)b[X][Y]=-1;while(a[X1][Y1]!=0){printf(迷宫终点的行号和列号有错,请重新输入\n);scanf(%d%d,&X1,&Y1);}st.top++;st.data[st.top].i=X;st.data[st.top].j=Y;st.data[st.top].di=-1;do{find=0;i=st.data[st.top].i;j=st.data[st.top].j;di=st.data[st.top].di;while(di4&&find==0){di++;switch(di){case0:i=st.data[st.top].i-1;j=st.data[st.top].j;break;case1:i=st.data[st.top].i;j=st.data[st.top].j+1;break;case2:i=st.data[st.top].i+1;j=st.data[st.top].j;break;case3:i=st.data[st.top].i;j=st.data[st.top].j-1;break;}if(b[i][j]==0&&i=0&&in&&j=0&&jm)find=1;}if(find==1){st.data[st.top].di=di;st.top++;st.data[st.top].i=i;st.data[st.top].j=j;st.data[st.top].di=-1;b[i][j]=-1;find=0;}else{b[st.data[st.top].i][st.data[st.top].j]=0;st.top--;}if(i==X1&&j==Y1){printf(迷宫路径如下:\n);for(intk=0;k=st.top;k++){printf(%d,%d\t,st.data[k].i,st.data[k].j);if((k+1)%6==0)printf(\n);}printf(\n);returntrue;}}while(st.top-1);returnfalse;}宁波工程学院计科12-1班
本文标题:数据结构C语言迷宫求解问题(有要求和源代码)
链接地址:https://www.777doc.com/doc-4793680 .html