机器人走迷宫 SDUT1590 ACM算法设计

机器人走迷宫

Time Limit: 1000MS Memory limit: 32768K

题目描述

迷宫对大家来说肯定是很熟悉的东西了,多数人都知道要想走出迷宫,在里面乱猜肯定是不行的,比较好的方法是贴着墙的一侧走,比如只贴着右侧走,最后肯定会走出迷宫,但不能保证要走多久,可能出口尽在咫尺你却错过了。

机器人只听从人的命令或按照预先写好的程序去行动。今天我们会给它命令,让它按照我们的命令去走,希望你能判断一下机器人能够走出迷宫,命令有四种:U,D,L,R分别代表让机器人向上下左右四个方向移动,如果碰到墙则不移动。

输入

输入数据首先是地图,先给出H和W分别代表地图的高和宽,然后是H*W的地图,*代表可以走,#代表墙,S代表起点,T代表终点。接下来是一个整数C代表命令的条数。接下一行有长度为C的字符串代表命令,0<=H,W<=10, 0<=C<=100。

输出

如果机器人按照给定的命令走,能到达终点则输出Yes,否则输出No。
注意:在命令执行完之前到达也算到达。

示例输入

5 5
S****
####*
*****
**###
#***T
16
RRRRDDLLLLDRDRRR

示例输出

Yes

来源

2011软件1-5班《程序设计基础》机试 tongjiantao

模拟题,用二维数组模拟地图

#include <iostream>
//#include <fstream>
using namespace std;

const int MAXN = 11;
int maze[MAXN][MAXN];
int h,w,o;
int x,y,r,s;
char c;

int main()
{
	//ifstream cin("in.txt");
	cin>>h>>w;	
	for(int i = 1;i <= h;i ++) for(int j = 1;j <= w;j++)
	{
		cin>>c;
		if('*' == c)
		{
			maze[i][j] = 1;
		}
		else if('S' == c)
		{
			maze[i][j] = 1;
			x = i;
			y = j;
		}
		else if('T' == c)
		{
			maze[i][j] = 1;
			r = i;
			s = j;
		}
	}
	cin>>o;
	bool IsOut = false;
	while(o --)
	{
		cin>>c;
		//Move
		if('U' == c && x > 1 && maze[x - 1][y] == 1)
			x --;			
		else if('D' == c && x < h && maze[x + 1][y] == 1)
			x ++;
		else if('L' == c && y > 1 && maze[x][y - 1] == 1)
			y --;
		else if('R' == c && y < w && maze[x][y + 1] == 1)
			y ++;
		//Judge
		if(x == r && y == s)
		{
			IsOut = true;
			cout<<"Yes"<<endl;
			break;
		}
	}
	if(!IsOut) cout<<"No"<<endl;
	return 0;
}
本博客所有博文,若无专门说明皆为原创,转载请注明作者和出处!
原文地址:https://www.cnblogs.com/ifinver/p/3031163.html