sdut1598 周游列国【简单模拟题】
周游列国
Time Limit: 1000ms Memory limit: 32768K 有疑问?点这里^_^
题目描述
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1598
大家都知道孔子吧,春秋战国时候的一个老头儿。当时出国还不用护照,所以他经常赶着牛车带着弟子们周游列国。可是这路也并不是那么好走的,当遇到高山时孔子他们就得绕着走了,你得考虑他牛车的实力能不能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
提示
代码:
1 #include<stdio.h> 2 #include<iostream> 3 using namespace std; 4 int main() 5 { 6 char f[101]; 7 cin>>f; 8 char map[101][101]={'#'}; 9 int visited[10000]={0},i,j,m,n,flag1,flag2; 10 cin>>m>>n; 11 for(i=1;i<=m;i++) 12 { 13 for(j=1;j<=n;j++) 14 { 15 cin>>map[i][j]; 16 if(map[i][j]=='S') 17 { 18 flag1=i; 19 flag2=j; 20 } 21 } 22 } 23 int t=0; 24 i=flag1; 25 j=flag2; 26 while(f[t]!='\0') 27 { 28 int i1=i,j1=j; 29 switch (f[t++]) 30 { 31 case 'L':j--;break; 32 case 'R':j++;break; 33 case 'U':i--;break; 34 case 'D':i++;break; 35 } 36 if(map[i][j]=='#')//本题目的关键,当遇到高山的时候要退出高山回到原来的出发点 37 { 38 i=i1; 39 j=j1; 40 continue; 41 } 42 if(map[i][j]>='0'&&map[i][j]<='9') 43 visited[map[i][j]-'0']=1; 44 } 45 int jieguo=1; 46 for(i=1;i<=m;i++) 47 for(j=1;j<=n;j++) 48 if(map[i][j]!='#'&&map[i][j]!='S') 49 { 50 if(visited[map[i][j]-'0']==0) 51 { 52 jieguo=0;//周游列国失败的标志 53 break; 54 } 55 } 56 if(jieguo==1)printf("Yes\n"); 57 else printf("No\n"); 58 return 0; 59 }