走迷宫游戏

#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;
}

转载于:https://www.cnblogs.com/chxuan/p/8232125.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值