周游列国
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu
Description
大家都知道孔子吧,春秋战国时候的一个老头儿。当时出国还不用护照,所以他经常赶着牛车带着弟子们周游列国。可是这路也并不是那么好走的,当遇到高山时孔子他们就得绕着走了,你得考虑他牛车的实力能不能hold住啊。当然,孔子是个很聪明的人,每次出门前都会四处打听,然后制定出一个赶车路线,然后按照路线去走。但是,由于很多路没有亲自走过他也不确定按这个路线到底能不能周游列国?然而,你有当时的地图,希望你编程判断一下按照孔子的行车路线能不能周游列国。
Input
第一行是行车路线即一个字符串只包含L,R,U和D分别代表左走,右走,上走,下走。接下来以上是两个整数H和W,0 < H,W < 20, 代表地图的高和宽。然后是H*W的地图。S代表孔子的起点。标有1~7的区域分别代表7个国家的领土,#代表高山。
Output
如果孔子能周游列国即经过这7个国家则输出Yes,否则输出No。
Sample Input
RDDDDLRRRRUU 5 5 S1111 22#22 33#44 56#77 56777
Sample Output
Yes 如果遇到#应直接退回到前一状态。最后判断当走完设计好的路线后,这7个国家是否都已经走过。
#include<stdio.h> #include<string.h> int main() { int n, m ,i, j, cnt, x, y, len; char s[100000], mapp[100][100]; int vis[10]; while(~scanf("%s", s)) { cnt =0; x = y = 0;//用x,y标记S的位置 len = 0; memset(mapp, 0, sizeof(mapp)); memset(vis, 0, sizeof(vis)); scanf("%d%d%*c", &n, &m); for(i=1; i<=n; i++) for(j=1; j<=m; j++) { scanf("%c", &mapp[i][j]); if(j==m) scanf("%*c"); if(mapp[i][j]==‘S‘) { x = i; y = j; } } len = strlen(s); for(i=0; i<len; i++) { if(s[i]==‘R‘) { y = y+1; if(mapp[x][y]==‘#‘) y = y-1; if(mapp[x][y]>=‘0‘ && mapp[x][y]<=‘7‘) vis[mapp[x][y]-‘0‘] = 1; } if(s[i]==‘L‘) { y = y-1; if(mapp[x][y]==‘#‘) y = y+1; if(mapp[x][y]>=‘0‘ && mapp[x][y]<=‘7‘) vis[mapp[x][y]-‘0‘] = 1; } if(s[i]==‘U‘) { x = x-1; if(mapp[x][y]==‘#‘) x = x+1; if(mapp[x][y]>=‘0‘ && mapp[x][y]<=‘7‘) vis[mapp[x][y]-‘0‘] = 1; } if(s[i]==‘D‘) { x = x+1; if(mapp[x][y]==‘#‘) x = x-1; if(mapp[x][y]>=‘0‘ && mapp[x][y]<=‘7‘) vis[mapp[x][y]-‘0‘] = 1; } } for(j=0; j<10; j++) { if(vis[j]!=0) cnt++; } if(cnt==7) printf("Yes\n"); else printf("No\n"); } return 0; }
时间: 2024-10-01 04:39:12