首页 > 代码库 > SDUT OJ 1598 周游列国
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。
示例输入
RDDDDLRRRRUU5 5S111122#2233#4456#7756777
示例输出
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;}
SDUT OJ 1598 周游列国
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。