您的位置:首页 > 其它

算法提高 我们的征途是星辰大海

2017-03-07 10:44 267 查看
 最新的火星探测机器人curiosity被困在了一个二维迷宫里,迷宫由一个个方格组成。

  共有四种方格:

  ‘.’ 代表空地,curiosity可以穿过它

  ‘#’ 代表障碍物,不可穿越,不可停留

  ‘S’ 代表curiosity的起始位置

  ‘T’ 代表curiosity的目的地

  NASA将会发送一系列的命令给curiosity,格式如下:“LRUD”分别代表向左,向右,向上,向下走一步。由于地球和火星之间最近时也有55000000km!所以我们必须提前判断这一系列的指令会让curiosity最终处在什么样的状态,请编程完成它。
输入格式
  第一行是一个整数T,代表有几个测试样例

  每个测试样例第一行是一个整数N(1<=N<=50))代表迷宫的大小(N*N)。随后的N行每行由N个字符串组成,代表迷宫。接下来的一行是一个整数Q,代表有多少次询问,接下来的Q行每行是一个仅由“LRUD”四个字母的组成的字符串,字符转长度小于1000.
输出格式
  对于每个询问输出单独的一行:

  “I get there!”:执行给出的命令后curiosity最终到达了终点。

  “I have no idea!”:执行给出的命令后curiosity未能到达终点。

  “I am dizzy!”:curiosity在执行命令的过程中撞到了障碍物。

  “I am out!”:代表curiosity在执行命令的过程中走出了迷宫的边界。
Sample Input

  2

  2

  S.

  #T

  2

  RD

  DR

  3

  S.#

  .#.

  .T#

  3

  RL

  DDD

  DDRR
Sample Output

  I get there!

  I am dizzy!

  I have no idea!

  I am out!

  I get there!

思路:
        找出起点坐标,按照指令走
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
char map[51][51],zl[1001][1001];
int T,n,q,x1,y1;
int check()
{
if (map[x1][y1] == 'T')
{
cout<<"I get there!"<<endl;
return 1;
}
else if (x1<0||x1>=n||y1<0||y1>=n)
{
cout<<"I am out!"<<endl;
return 1;
}
else if (map[x1][y1] == '#')
{
cout<<"I am dizzy!"<<endl;
return 1;
}
return 0;
}
int main()
{
int i,j,k,t1,t2;
cin>>T;
while (T--)
{
cin>>n;
getchar();
for (i=0; i<n; i++) //输入地图
{
gets(map[i]);
}
cin>>q; //q行指令
getchar();
for (i=0; i<q; i++) //q行指令
{
gets(zl[i]);
}
//找出起点左标
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (map[i][j] == 'S')
{
x1 = i; y1 = j;
}
}
}
t1 = x1;
t2 = y1;
for (i=0; i<q; i++)
{
x1 = t1;
y1 = t2;
for (j=0; j<strlen(zl[i]); j++)
{
switch (zl[i][j])
{
case 'L': //向左列-
--y1;
if (check())
j=strlen(zl[i])+10; //退出循环
break;
case 'R': //向右列+
++y1;
if (check())
j=strlen(zl[i])+10; //退出循环
break;
case 'U': //向上行-
--x1;
if (check())
j=strlen(zl[i])+10; //退出循环
break;
case 'D': //向下行+
++x1;
if (check())
j=strlen(zl[i])+10; //退出循环
break;
}
}
if (j == strlen(zl[i])) //说明内循环是执行到底的没有被中断
{
cout<<"I have no idea!"<<endl;
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: