走迷宫游戏

#include"stdio.h"

int mg[10][10]={
	{1,1,1,1,1,1,1,1,1,1},
	{1,0,0,1,0,0,0,1,0,1},
	{1,0,0,1,0,0,0,1,0,1},
	{1,0,0,0,0,1,1,0,0,1},
	{1,0,1,1,1,0,0,0,0,1},
	{1,0,0,0,1,0,0,0,0,1},
	{1,0,1,0,0,0,1,0,0,1},
	{1,0,1,1,1,0,1,1,0,1},
	{1,1,0,0,0,0,0,0,0,1},
	{1,1,1,1,1,1,1,1,1,1}
};
typedef struct{
	int i;
	int j;
	int di;
}Box;
typedef struct{
	Box data[1000];
	int top;
}StType;
bool mgpath(int xi,int yi,int xe,int ye)
{
	int i,j,k,di,find;
	StType st;
	st.top=-1;
	st.top++;
	st.data[st.top].i=xi;
	st.data[st.top].j=yi;
	st.data[st.top].di=-1;
	mg[xi][yi]=-1;
	while(st.top>-1)
	{
      i=st.data[st.top].i;j=st.data[st.top].j;
      di=st.data[st.top].di;
	  if(i==xe&&j==ye)
	  {
         printf("迷宫路径最短路径如下:\n");
		 for(k=0;k<=st.top;k++)
		 {
			 printf("\t(%d,%d)",st.data[k].i,st.data[k].j);
			 if((k+1)%5==0)
				 printf("\n");
		 }
		 printf("\n");
		 return true;                                          //找到一条路径后返回true
	  }
	  find=0;
	  while(di<4&&find==0)
	  {
		  di++;
		  switch(di)
		  {
		  case 0:
			  i=st.data[st.top].i-1;
			  j=st.data[st.top].j;
			  break;
		  case 1:
			  i=st.data[st.top].i;
			  j=st.data[st.top].j+1;
			  break;
		  case 2:
			  i=st.data[st.top].i+1;
			  j=st.data[st.top].j;
			  break;
		  case 3:
			  i=st.data[st.top].i;
			  j=st.data[st.top].j-1;
			  break;
		  }
		  if(mg[i][j]==0)
			  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;
		  mg[i][j]=-1;
	  }
	  else
	  {
		  mg[st.data[st.top].i][st.data[st.top].j]=0;
		  st.top--;
	  }
	}
    return false;
};


int  main()
{
	printf("迷宫如下图所示:\n");
	for(int i=0;i<10;i++)
	{
		for(int j=0;j<10;j++)
			printf("%d ",mg[i][j]);
		printf("\n");
	}
    if(!mgpath(1,1,8,8))
		printf("该迷宫无解!");
	return 0;
}

posted @ 2016-11-15 20:02  壹言  阅读(162)  评论(0编辑  收藏  举报