资源描述:
《迷宫求解问题的代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#includeusingnamespacestd;classT//定义描述迷宫中当前位置的结构类型{public:intx;//x代表当前位置的行坐标inty;//y代表当前位置的列坐标intdir;//0:无效,1:东,2:南,3:西,4:北};classLinkNode//链表结点{friendclassStack;public:Tdata;LinkNode*next;};classStack{private:LinkNode*top;//指向第一个结点的栈顶指针public:Stack();//构造函数,置
2、空栈~Stack();//析构函数voidPush(Te);//把元素data压入栈中TPop();//使栈顶元素出栈TGetPop();//取出栈顶元素voidClear();//把栈清空boolempty();//判断栈是否为空,如果为空则返回1,否则返回0};Stack::Stack()//构造函数,置空栈{top=NULL;}Stack::~Stack()//析构函数{}voidStack::Push(Te)//把元素x压入栈中{LinkNode*P;P=newLinkNode;P->data=e;P->next=top;to
3、p=P;}TStack::Pop()//使栈顶元素出栈{TTemp;LinkNode*P;P=top;top=top->next;Temp=P->data;deleteP;returnTemp;}TStack::GetPop()//取出栈顶元素{returntop->data;}voidStack::Clear()//把栈清空{top=NULL;}boolStack::empty()//判断栈是否为空,如果为空则返回1,否则返回0{if(top==NULL)return1;elsereturn0;}intmove[4][2]={{0,
4、1},{1,0},{0,-1},{-1,0}};//定义当前位置移动的4个方向boolMazepath(int**maze,intm,intn);//寻找迷宫maze中从(0,0)到(m,n)的路径//到则返回true,否则返回falsevoidPrintPath(Stackp);//输出迷宫的路径voidRestore(int**maze,intm,intn);//恢复迷宫int**GetMaze(int&m,int&n);//获取迷宫//返回存取迷宫的二维指针intmain(){intm=0,n=0;//定义迷宫的长和宽int**
5、maze;//定义二维指针存取迷宫maze=GetMaze(m,n);//调用GetMaze(int&m,int&n)函数,得到迷宫if(Mazepath(maze,m,n))//调用Mazepath(int**maze,intm,intn)函数获取路径cout<<"迷宫路径探索成功!";elsecout<<"路径不存在!";return0;}int**GetMaze(int&m,int&n)//返回存取迷宫的二维指针{int**maze;//定义二维指针存取迷宫inti=0,j=0;cout<<"请输入迷宫的长和宽:";in
6、ta,b;cin>>a>>b;//输入迷宫的长和宽cout<<"请输入迷宫内容:";m=a;n=b;//m,n分别代表迷宫的行数和列数maze=newint*[m+2];//申请长度等于行数加2的二级指针for(i=0;i>maze[i][j];for(i=0;i7、1;for(i=0;i8、;maze[1][1]=-1;//标志入口位置已到达过while(!q.empty())//栈q非空,则反复探索{Temp2=q.GetPop();//获取栈顶元素if(!(p.GetPop().x==q.GetPop(