首页 > 编程知识 正文

杭电oj,杭电oj题库

时间:2023-05-05 23:04:27 阅读:206342 作者:1642

杭电OJ 1035

题目的意思不难理解,我建了一个坐标系使得字符二维数组a[x][y]中x,y分别对应坐标系中的x坐标和y坐标。
以第一个样例为例,建立的坐标系如下,红色网格为运动范围,超出红色网格范围,即x>=行数或x<0或y>=列数或y<0时,机器人退出。

#include <stdio.h>#include <string.h>char a[1000][1000];//指令数组int b[1000][1000]={0};//标志数组,标志该位置是否到过int main(){int n,m,start,flag,count,c,d;int i,j,x,y,cnt;while(scanf("%d%d%d",&n,&m,&start)!=EOF){if(n==0&&m==0) break;getchar();memset(b,0,sizeof(b)); //标记数组记为0 for(i=0;i<n;i++)gets(a[i]);x=0;y=start-1;cnt=0;flag=0;while(x<n&&x>=0&&y<m&&y>=0){//一定要细心,条件判断不能错 if(!b[x][y]){if(a[x][y]=='W'){b[x][y]=1;y=y-1;cnt++;}else if(a[x][y]=='E'){b[x][y]=1;y=y+1;cnt++;}else if(a[x][y]=='S'){b[x][y]=1;x=x+1;cnt++;}else{b[x][y]=1;x=x-1;cnt++;}}else{//某位置到过了,将出现循环 flag=1;break;}}if(flag==0) printf("%d step(s) to exitn",cnt);else{count=0;//count统计循环长度 c=x;d=y;while(1){if(a[x][y]=='W') {b[x][y]=1;y=y-1;count++;}else if(a[x][y]=='E'){b[x][y]=1;y=y+1;count++;}else if(a[x][y]=='S'){b[x][y]=1;x=x+1;count++;}else{b[x][y]=1;x=x-1;count++;}if(x==c&&y==d){printf("%d step(s) before a loop of %d step(s)n",cnt-count,count);break;}}}memset(a,0,sizeof(a));}return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。