题目描述
大家都知道孔子吧,春秋战国时候的一个老头儿。当时出国还不用护照,所以他经常赶着牛车带着弟子们周游列国。可是这路也并不是那么好走的,当遇到高山时孔子他们就得绕着走了,你得考虑他牛车的实力能不能hold住啊。当然,孔子是个很聪明的人,每次出门前都会四处打听,然后制定出一个赶车路线,然后按照路线去走。但是,由于很多路没有亲自走过他也不确定按这个路线到底能不能周游列国?然而,你有当时的地图,希望你编程判断一下按照孔子的行车路线能不能周游列国。
输入
第一行是行车路线即一个字符串只包含L,R,U和D分别代表左走,右走,上走,下走。接下来以上是两个整数H和W,0 < H,W < 20,代表地图的高和宽。然后是H*W的地图。S代表孔子的起点。标有1~7的区域分别代表7个国家的领土,#代表高山。
输出
如果孔子能周游列国即经过这7个国家则输出Yes,否则输出No。
示例输入
RDDDDLRRRRUU5 5S111122#2233#4456#7756777
示例输出
Yes
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char order[500];
char mp[25][25];
bool vis[8];
int main()
{
int h,w,i,j,k;
int x,y;
while(~scanf("%s",order))
{
memset(vis,0,sizeof(vis));
scanf("%d%d%*c",&h,&w);
for(i=0; i<h; i++)
for(j=0; j<w; j++)
{
scanf("%c",&mp[i][j]);
if(j==w-1)
scanf("%*c"); //吃掉换行
if(mp[i][j]=='S')
{
x=i;
y=j;
}
}
//另一种输入
for(i=0;i<h;i++)
scanf("%s",mp[i]);
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(mp[i][j]=='S')
{
x=i;
y=j;
}
break;
}
if(j<w)
break;
}
for(i=0; order[i]!='\0'; i++)
{
if(order[i]=='L')
{
y-=1;
if(mp[x][y]=='#')
y+=1;
else if(mp[x][y]>='1'&&mp[x][y]<='7')
{
k=mp[x][y]-'0';
vis[k]=1;
}
}
else if(order[i]=='R')
{
y+=1;
if(mp[x][y]=='#')
y-=1;
else if(mp[x][y]>='1'&&mp[x][y]<='7')
{
k=mp[x][y]-'0';
vis[k]=1;
}
}
else if(order[i]=='U')
{
x-=1;
if(mp[x][y]=='#')
x+=1;
else if(mp[x][y]>='1'&&mp[x][y]<='7')
{
k=mp[x][y]-'0';
vis[k]=1;
}
}
else if(order[i]=='D')
{
x+=1;
if(mp[x][y]=='#')
x-=1;
else if(mp[x][y]>='1'&&mp[x][y]<='7')
{
k=mp[x][y]-'0';
vis[k]=1;
}
}
}
int sum=0;
for(i=1; i<=7; i++)
sum+=vis[i];
if(sum==7)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}