poj 1573

模拟题,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]);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值