DS||迷宫

题目描述
有一个 10 x 10 的迷宫,起点是‘S’,终点是‘E’,墙是‘#’,道路是空格。一个机器人从起点走到终点。当机器人走到一个通道块,前面已经没有路可走时,它会转向到当前方块的右手方向继续走。如果机器人能够过,则留下足迹‘*’,如果走不通,则留下标记‘!’。
下面给出书中的算法,请你模拟机器人的走法输出最终的状态。

图:迷宫算法
输入
一个 10 x 10 的二维字符数组。
输出
机器人走过的路径状态。
样例输入 Copy

##########
#S #   # #
#  #   # #
#    ##  #
# ###    #
#   #    #
# #   #  #
# ### ## #
##      E#
##########

样例输出 Copy

##########
#**#!!!# #
# *#!!!# #
#**!!##  #
#*###    #
#***#    #
# #***#  #
# ###*## #
##   ****#
##########
#include"stdio.h"
#define OK 1
#define ERROR 0
char map[11][11];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
int dfs(int x,int y)
{
	int i,nextx,nexty;
	if(map[x][y]=='E')
	{
		map[x][y]='*';
		return OK;
	}
	for(i=0;i<4;i++)
	{
		 
		nextx=dir[i][0]+x;
		nexty=dir[i][1]+y;
		if(map[nextx][nexty]==' ')
		{
			map[nextx][nexty]='*';
			return dfs(nextx,nexty);
		}
		else if(map[nextx][nexty]=='E')
		{
			map[nextx][nexty]='*';
			return OK;
		}
	}
	map[x][y]='!';
	for(i=0;i<4;i++)
	{
		
		nextx=dir[i][0]+x;
		nexty=dir[i][1]+y;
		if(map[nextx][nexty]=='*')
			return dfs(nextx,nexty);	
	}
}
int main()
{
	int i,j,x,y,q,p;
	for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
		{
			map[i][j]=getchar();
			if(map[i][j]=='S')
			{
				x=i;
				y=j;
			}
			if(map[i][j]=='E')
			{
				q=i;
				p=j;
			}
		}
		getchar();
    }
    map[x][y]='*';
    dfs(x,y);
    if(map[q][p]!='E')
	{
	for(i=0;i<10;i++)
	{
		for(j=0;j<10;j++)
		putchar(map[i][j]);
		printf("\n");
	}}	
	else
	{
		for(i=0;i<10;i++)
	{
		for(j=0;j<10;j++)
		{
			if(map[i][j]=='*')
			putchar('!');
			else 
			putchar(map[i][j]);
		}
		
		printf("\n");
	}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值