SDUT OJ 1598 周游列国

周游列国

Time Limit: 1000ms   Memory limit: 32768K  有疑问?点这里^_^

题目描述

       大家都知道孔子吧,春秋战国时候的一个老头儿。当时出国还不用护照,所以他经常赶着牛车带着弟子们周游列国。可是这路也并不是那么好走的,当遇到高山时孔子他们就得绕着走了,你得考虑他牛车的实力能不能hold住啊。当然,孔子是个很聪明的人,每次出门前都会四处打听,然后制定出一个赶车路线,然后按照路线去走。但是,由于很多路没有亲自走过他也不确定按这个路线到底能不能周游列国?然而,你有当时的地图,希望你编程判断一下按照孔子的行车路线能不能周游列国。

输入

       第一行是行车路线即一个字符串只包含L,R,U和D分别代表左走,右走,上走,下走。接下来以上是两个整数H和W,0 < H,W < 20, 代表地图的高和宽。然后是H*W的地图。S代表孔子的起点。标有1~7的区域分别代表7个国家的领土,#代表高山。

输出

如果孔子能周游列国即经过这7个国家则输出Yes,否则输出No。

示例输入

RDDDDLRRRRUU

5 5

S1111

22#22

33#44

56#77

56777

示例输出

Yes

分析:此题目好坑,需要注意的是 如果给定的路线会经过 '#' 或者 'S' 应该怎样处理 ? 跳出直接输出No,还是,,,? 因为这个,我 WA 好几次!
正确的处理是:遇到'#',回退到上一步。遇到 'S',直接无视 continue 跳过就可以了!
代码:
#include <string.h>

#include <stdio.h>

#include <iostream>

#include <string>

#include <algorithm>

#include <math.h>



using namespace std;



char map[21][21];



int main()

{

    int n, m;

    char s[2000];

    int len;

    int i, j, k;

    char ch;



    while(scanf("%s", s)!=EOF)

    {

        len = strlen(s);

        //puts(s);



        cin>>n>>m;

        int dd, ff;

        int a[8];

        memset(a, 0, sizeof(a));



        for(i=0; i<n; i++)

        {

            for(j=0; j<m; j++)

            {

                ch=getchar();

                while(ch!='S' && ch!='#' )

                {

                    if(ch>='1' && ch<='7')

                    {

                        //map[i][j]=ch;

                        break;

                    }

                    else

                    {

                        ch=getchar();

                    }

                }

                map[i][j]=ch;



                if(map[i][j]=='S')

                {

                    dd=i;

                    ff=j;

                }

            }

        }



        //puts(s);



        int flag=1;



        for(k=0; k<len; k++)

        {

            if( s[k]=='R' )

            {

                ff++;

                if(  ff>=0 && ff<m && (map[dd][ff]>='1' && map[dd][ff]<='7') )

                {

                    a[map[dd][ff]-48]++;

                    continue;

                }

                else if(map[dd][ff]=='S')

                  continue;

                else if(map[dd][ff]=='#' )

                {

                    ff--;

                }



            }

            else if( s[k]=='L' )

            {

                ff--;

                if( ff>=0 && ff<m && (map[dd][ff]>='1' && map[dd][ff]<='7') )

                {



                    a[map[dd][ff]-48]++;

                    continue;

                }

                else if(map[dd][ff]=='S') continue;

                else if(map[dd][ff]=='#') ff++;



            }

            else if(s[k]=='U')

            {

                dd--;

                if( dd>=0 && dd<n && (map[dd][ff]>='1' && map[dd][ff]<='7') )

                {



                    a[map[dd][ff]-48]++;

                    continue;

                }

                else if(map[dd][ff]=='S') continue;

                else if(map[dd][ff]=='#') dd++;



            }

            else if(s[k]=='D' )

            {

                dd++;

                if(  (dd>=0 && dd<n) && (map[dd][ff]>='1' && map[dd][ff]<='7') )

                {



                    a[map[dd][ff]-48]++;

                    continue;

                }

                else if(map[dd][ff]=='S')

                  continue;

                else if(map[dd][ff]=='#')

                  dd--;

            }

        }

        int w=1;

        for(i=1; i<=7; i++)

        {

            if(a[i]==0)

            {

                w=0;

                break;

            }

        }

        if(w==0)

            cout<<"No\n";

        else

            cout<<"Yes\n";

    }



    return 0;

}

 

 

你可能感兴趣的:(du)