周游列国

题目描述

       大家都知道孔子吧,春秋战国时候的一个老头儿。当时出国还不用护照,所以他经常赶着牛车带着弟子们周游列国。可是这路也并不是那么好走的,当遇到高山时孔子他们就得绕着走了,你得考虑他牛车的实力能不能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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值