首页 > 学院 > 开发设计 > 正文

poj1573

2019-11-10 18:28:41
字体:
来源:转载
供稿:网友

题目大意:

给一个矩阵的行数和列数,然后给出机器人所在的位置,按照N,S,E,W四个方向走,问最后是走出矩阵还是进入循环。

解题思路:

用个数组记录该位置是否已经走过,然后按照提示走就可以了

代码如下:

#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){ int r,c,s; int i,j,count,mark,flag; char ch[15][15]; int vis[15][15]; while(scanf("%d%d%d",&r,&c,&s)!=EOF) { flag=0; memset(vis,0,sizeof(vis)); if(r==0&&c==0&&s==0) { break; } for(i=1;i<=r;i++) { getchar(); ch[i][0]='e'; for(j=1;j<=c;j++) { scanf("%c",&ch[i][j]); } ch[i][c+1]='e'; } for(i=0;i<=c+1;i++) { ch[0][i]='e'; } for(i=0;i<=c+1;i++) { ch[r+1][i]='e'; } i=1;j=s; count=1; while(ch[i][j]!='e') { if(ch[i][j]=='W') { vis[i][j]=count; i=i;j=j-1; if(vis[i][j]) { mark=count+1-vis[i][j]; flag=1; break; } else { count++; } } else if(ch[i][j]=='E') { vis[i][j]=count; i=i;j=j+1; if(vis[i][j]) { mark=count+1-vis[i][j]; flag=1; break; } else { count++; } } else if(ch[i][j]=='N') { vis[i][j]=count; i=i-1;j=j; if(vis[i][j]) { mark=count+1-vis[i][j]; flag=1; break; } else { count++; } } else if(ch[i][j]=='S') { vis[i][j]=count; i=i+1;j=j; if(vis[i][j]) { mark=count+1-vis[i][j]; flag=1; break; } else { count++; } } } if(flag) { PRintf("%d step(s) before a loop of %d step(s)/n",vis[i][j]-1,mark); } else { printf("%d step(s) to exit/n",count-1); } } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表