欢迎来到天天文库
浏览记录
ID:7273665
大小:196.50 KB
页数:9页
时间:2018-02-10
《迷宫问题非递归求解》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、东华理工大学——迷宫问题非递归求解题目:迷宫问题非递归求解一、需求分析迷宫问题非递归求解,要求实现以下任务:(1)、可以输入一个任意大小的迷宫数据;(2)、用非递归的方法求出一条走出迷宫的路径;(3)、将路径输出;二、总体设计对于迷宫问题的非递归求解,我采用二维指针即指向指针的指针来保存迷宫,采用顺序栈来探寻迷宫路径,最后将路径输出。寻找一条走出迷宫的路径时,当下一方向可以走时(为0时),就入栈,若下一方向不可走时就退栈,再次试探另一方向是否可以走,可走再入栈,到达新的一点时依此反复。最后就可以得到迷宫的路径。将路径输出时则采用退栈方式,依次输出路径。三、详细设计-9-东华理
2、工大学——迷宫问题非递归求解创建迷宫Create()寻找路径find()选择1选择2选择3重新输入入口出口重新创建迷宫恢复迷宫结束恢复迷宫开始四、实现部分//maze.h头文件#include#include#include#includeusingnamespacestd;typedefstruct{intx,y,d;}Datetype;typedefstruct{intx,y;intpre;}SqType;typedefstackstack_int;-9-东华理工大学——迷宫问题非递归
3、求解classmaze{public:voidprint(SqTypesq[],int);voidagain(int**maze,intm,intn);voidfind(int**maze,inta,intb,intm,intn);voidcreate();private:intfront,rear;};classStack{public:voidPush();intPop();Stack();~Stack();private:inttop;intdata[1000];};//maze.cpp成员函数#include"maze.h"#include"iostream"void
4、maze::print(SqTypesq[],int){inti;i=rear;do{cout<<"("<5、tetypemove[4]={{0,1},{1,0},{0,-1},{-1,0}};stack_intst;Datetypetemp;intx,y,d,i,j;if(maze[a][b]==1){cout<<"进口输入有误。";return;}temp.x=a;temp.y=b;temp.d=-1;st.push(temp);while(!st.empty()){temp=st.top();x=temp.x;y=temp.y;d=temp.d+1;while(d<4){i=x+move[d].x;j=y+move[d].y;if(maze[i][j]==0){temp.x=x6、;temp.y=y;temp.d=d;st.push(temp);x=i;y=j;maze[x][y]=-1;if(x==m&&y==n){cout<<"迷宫路径为:"<7、ze::create(){intm,n,i,j,l,c,d;cout<<"请输入迷宫的行数列数:"<>m>>n;int**maze=newint*[m];for(i=0;i<=m+1;i++)maze[i]=newint[n];cout<<"请输入迷宫:"<>maze[i][j];A:if(maze[i][j]!=0&&maze[i][j]!=
5、tetypemove[4]={{0,1},{1,0},{0,-1},{-1,0}};stack_intst;Datetypetemp;intx,y,d,i,j;if(maze[a][b]==1){cout<<"进口输入有误。";return;}temp.x=a;temp.y=b;temp.d=-1;st.push(temp);while(!st.empty()){temp=st.top();x=temp.x;y=temp.y;d=temp.d+1;while(d<4){i=x+move[d].x;j=y+move[d].y;if(maze[i][j]==0){temp.x=x
6、;temp.y=y;temp.d=d;st.push(temp);x=i;y=j;maze[x][y]=-1;if(x==m&&y==n){cout<<"迷宫路径为:"<7、ze::create(){intm,n,i,j,l,c,d;cout<<"请输入迷宫的行数列数:"<>m>>n;int**maze=newint*[m];for(i=0;i<=m+1;i++)maze[i]=newint[n];cout<<"请输入迷宫:"<>maze[i][j];A:if(maze[i][j]!=0&&maze[i][j]!=
7、ze::create(){intm,n,i,j,l,c,d;cout<<"请输入迷宫的行数列数:"<>m>>n;int**maze=newint*[m];for(i=0;i<=m+1;i++)maze[i]=newint[n];cout<<"请输入迷宫:"<>maze[i][j];A:if(maze[i][j]!=0&&maze[i][j]!=
此文档下载收益归作者所有