迷宫问题代码详解

迷宫问题是回溯法的典型应用,可以用栈解决,也可以用队列来解决迷宫问题。
下面是小编用栈解决迷宫问题的已经成功运行的代码,提供给大家参考。

#include
#include
using namespace std;
#define MaxSize 100
typedef struct Box
{     int i;			//当前方块的行号
      int j;				//当前方块的列号
      int di;			//di是下一可走相邻方位的方位号
}Box;

typedef struct Box T; 
				//定义方块类型
typedef struct mystack
{    T* data;
     int top;			//栈顶指针
}mystack;			//定义顺序栈类型


//构造一个空的顺序栈 
void InitStack(mystack &s)
{	 
	s.data = new T[MaxSize];
    s.top=-1; 
}

//顺序栈的销毁 
void DestroyStack(mystack &s)
{
  delete []s.data; 
  s.top=-1;
} 
//判断是否栈满 
bool fullstack(mystack &s)
{
if(s.top==MaxSize-1)
	return true;
	return false;  
}
	
//入栈操作
void Push(mystack &s,T &n)
{
  if(fullstack(s))
   {
   	 cout<<"full!"<(xe,ye)
{    
     T path[MaxSize],e;     // 存储入栈的Box值 
     int i,j,di,i1,j1,k,t=0;   
	 bool find;
      mystack st;				//定义栈st
      InitStack(st);				//初始化栈顶指针
      e.i=xi; 
	  e.j=yi; 
	  e.di=-1;			//设置e为入口
	  int p;//首元素入栈 
      Push(st,e);				//方块e进栈
      //st.top++;
      mg[xi][yi]=-1;	//入口的迷宫值置为-1避免重复走到该方块
      
     while (!StackEmpty(st))	//栈不空时循环
     {       
        GetTop(st,e);		//取栈顶方块e
        i=e.i; 
		j=e.j; 
		di=e.di;
        if (i==xe && j==ye)		//找到了出口,输出该路径 
        {	 
		  cout<<"一条迷宫路径如下:"<=1)
          {     
		        k--;				         
                cout<<"("<>a[i][j];
	      
	if(!mgpath(1,2,7,8,a))
	     cout<<"该迷宫问题没有解!"<

输入和运行结果如下:
迷宫问题代码详解_第1张图片

你可能感兴趣的:(迷宫问题代码详解)