⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maze.h

📁 经典迷宫问题求解
💻 H
字号:
typedef struct
{int m,n;
 char arr[100][100];
}MazeType;

void InitMaze(MazeType &maze,int a[][10],int row,int col)
{
 maze.m=row;maze.n=col;
 int i,j;
 for(i=0;i<100;i++)
   for(j=0;j<100;j++)
   maze.arr[i][j]=1;
 for(i=1;i<=maze.m;i++)
	 for(j=1;j<=maze.n;j++)
		 maze.arr[i][j]=a[i-1][j-1];
 }


Status Pass(MazeType maze,PosType curpos)
{if(maze.arr[curpos.r][curpos.c]==0)
   return 1;
 else return 0;
}

void FootPrint(MazeType &maze,PosType curpos)
{maze.arr[curpos.r][curpos.c]='*';}

Status Same(PosType curpos,PosType end)
{if(curpos.r==end.r&&curpos.c==end.c)
       return 1;
 else return 0;
}

PosType NextPos(PosType &curpos,directiveType di)
{switch(di)
{case 1:
	curpos.c=curpos.c+1;break;
  case 2:
    curpos.r=curpos.r+1;break;
  case 3:
    curpos.c=curpos.c-1;break;
  case 4:
	curpos.r=curpos.r-1;break;
  }
 return curpos;
}

void MarkPrint(MazeType &maze,PosType es)
 {maze.arr[es.r][es.c]='@';}


void Back(MazeType &maze)
{	for(int i=1;i<maze.m+1;i++)
	{for(int j=1;j<maze.n+1;j++)
       if(maze.arr[i][j]=='#')
	  maze.arr[i][j]=1;
	   else
		   if(maze.arr[i][j]=='*'||maze.arr[i][j]=='@')
	  maze.arr[i][j]=0;
	}
}

Status MazePath(MazeType &maze,PosType start,PosType end)
{ElemType e;PosType curpos;Stack s;
  InitStack(s);curpos=start;
  int curstep=1;int found=FALSE;
 Back(maze);
  do{
	 if(Pass(maze,curpos))
	 {
		 FootPrint(maze,curpos);
	 e.step=curstep;
	 e.seat.r=curpos.r;
	 e.seat.c=curpos.c;
	 e.di=1;
	  Push(s,e);
	  if(Same(curpos,end)) found=TRUE;
      else{

		  curpos=NextPos(curpos,1);
		  curstep++;
	  }
	 }
	 else
	 {

		 if(!StackEmpty(s)){
			 Pop(s,e);
			 while(e.di==4&&!StackEmpty(s))
			 {MarkPrint(maze,e.seat);
			   Pop(s,e);
			   curstep--;
			 }
			 if(e.di<4){
				 e.di++;Push(s,e);
				 curpos=NextPos(e.seat,e.di);
			 }
		 }
		 }
 }while(!StackEmpty(s)&&!found);
for(int i=1;i<maze.m+1;i++)
  {for(int j=1;j<maze.n+1;j++)
	  if(maze.arr[i][j]==1)
	  maze.arr[i][j]='#';}
 return found;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -