首页 > 代码库 > PKU 1573 Robot Motion(简单模拟)
PKU 1573 Robot Motion(简单模拟)
原题大意:原题链接
给出一个矩阵(矩阵中的元素均为方向英文字母),和人的初始位置,问是否能根据这些英文字母走出矩阵.(因为有可能形成环而走不出去)
此题虽然属于水题,但是完全独立完成而且直接1A还是很开心的
注意:对于形成环的情况则从进入环的交点处重新走一遍,记录步数即可
#include<cstdio> #include<cstring> int n,m,p; bool vis[1010][1010]; char str[1010][1010]; bool can(int x,int y) { if(x<1||x>n||y<1||y>m||vis[x][y]) return false; return true; } int main() { while(scanf("%d%d%d",&n,&m,&p),n|m|p){ memset(vis,0,sizeof(vis)); getchar(); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) scanf("%c",&str[i][j]); getchar(); } int x=1,y=p,step1=0; while(can(x,y)){ int px=x,py=y; vis[px][py]=1; if(str[px][py]==‘E‘) {y++,step1++;} else if(str[px][py]==‘S‘) {x++,step1++;} else if(str[px][py]==‘W‘) {y--,step1++;} else if(str[x][y]==‘N‘) {x--,step1++;} } if(vis[x][y]){ int step2=0,ox=x,oy=y; while(1){ int px=x,py=y; if(str[px][py]==‘E‘) {y++,step2++;} else if(str[px][py]==‘S‘) {x++,step2++;} else if(str[px][py]==‘W‘) {y--,step2++;} else if(str[px][py]==‘N‘) {x--,step2++;} if(x==ox&&y==oy){ printf("%d step(s) before a loop of %d step(s)\n",step1-step2,step2); break; } } } else printf("%d step(s) to exit\n",step1); } }
PKU 1573 Robot Motion(简单模拟)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。