模拟题,wa了一次,一开始 初始化 mark 为 0,step初值也为0,结果 对于 从一开始就进入循环的状态 产生错误结果
后来mark初始化为 -1才 ac了
#include<cstdio>
#include<cstring>
#define for if(0);else for
const int size=12;
char map[size][size];
int mark[size][size];
int r,c,s;
int isout(int a,int b){
if(!(a>=0&&a<r&&b>=0&&b<c))return 1;
return 0;
}
int main(){
while(scanf("%d%d%d",&r,&c,&s)&&(r||c||s)){
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
scanf(" %c",&map[i][j]);
}
}
memset(mark,-1,sizeof(mark));
int sr=0,sc=s-1,step=0;
int flag=0;
while(1){
mark[sr][sc]=step;
if(map[sr][sc]=='N'){sr--;}
else if(map[sr][sc]=='E'){sc++;}
else if(map[sr][sc]=='S'){sr++;}
else sc--;
step++;
if(isout(sr,sc)){flag=1;break;}
if(mark[sr][sc]!=-1)break;
}
if(flag)printf("%d step(s) to exit\n",step);
else printf("%d step(s) before a loop of %d step(s)\n",mark[sr][sc],step-mark[sr][sc]);
}
}