【模拟】HDU1035Robot Motion

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wlxsq/article/details/77963544

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
string s[N];		//	整行读入;
int vis[N][N];		//	标记该位置是否走过,且记录是第几步走过
int n,m,k;
int check(int x,int y)
{
	if(x>n-1||y>m-1||x<0||y<0)	return 1;
	if(vis[x][y])	return 2;
	return 0;
}
int changeXY(int *x,int *y,char dir)
{
	if(dir=='E'){
		(*y)++;
	}else if(dir=='W'){
		(*y)--;
	}else if(dir=='N'){
		(*x)--;
	}else if(dir=='S'){
		(*x)++;
	}
}
void dfs(int x,int y)
{
	int ans;
	int step=1;
//	cout<<x<<' '<<y<<endl;
	vis[x][y]=step++;
	changeXY(&x,&y,s[x][y]);
//	cout<<x<<' '<<y<<endl;
	while(!(ans=check(x,y))){
//		cout<<x<<' '<<y<<endl;
		char dir=s[x][y];
		vis[x][y]=step++;
		changeXY(&x,&y,dir);
	}
//	cout<<ans<<endl;
//	cout<<x<<' '<<y<<endl;
	if(ans==1)	cout<<step-1<<" step(s) to exit"<<endl;
	else cout<<vis[x][y]-1<<" step(s) before a loop of "<<step-vis[x][y]<<" step(s)"<<endl;
}
int main()
{
	while(cin>>n>>m&&n&&m){
		memset(vis,0,sizeof(vis));
		cin>>k;
		for(int i=0;i<n;i++)
			cin>>s[i];
		dfs(0,k-1);
	}
	return 0;
}


猜你喜欢

转载自blog.csdn.net/wlxsq/article/details/77963544