Robot Motion POJ 1573(模拟法)

问题:Robot Motion POJ - 1573

题目描述不写了,就是判断机器人会不会走出图或在图内成环

分析:

代码好想,用visited[]记录走过几步,循环了,就先输出这一步之前的数值,然后用现在的步数减去其就是环的长度;出图了,就直接输出步数;

但是!!注意起点我们就算赋值,也是赋值为0,这就跟没赋值一样,如果成环的时候是回到起点的话,就会出错,所以从起点开始,从1开始填,输出的时候-1就可以了

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<stack>   
#include<set>  
#include<bitset>  
#include<list>

#define UP(i,x,y) for(int i=x;i<=y;i++)  
#define DOWN(i,x,y) for(int i=x;i>=y;i--)  
#define MEM(a,x) memset(a,x,sizeof(a))
#define W(a) while(a) 
#define ll long long  
#define INF 0x3f3f3f3f  
#define EXP 1e-10  
#define lowbit(x) (x&-x)
 
using namespace std;
char pic[15][15];
int visited[15][15];
int main(){
	int n,m,s;
	cin>>n>>m>>s;
	while(n!=0||m!=0||s!=0){
		MEM(pic,0);
		MEM(visited,0);
		UP(i,1,n){
			UP(j,1,m){
				cin>>pic[i][j];
			}
		}
		int x=1,y=s,step=1,k=1;
		while(x>=1&&x<=n&&y>=1&&y<=m){
			if(visited[x][y]){
				cout<<visited[x][y]-1<<" step(s) before a loop of "<<step-visited[x][y]<<" step(s)"<<endl;
				k=0;break;
			}
			else{
				visited[x][y]=step;
			}
			if(pic[x][y]=='N'){x--;step++;}
			else if(pic[x][y]=='S'){x++;step++;}
			else if(pic[x][y]=='W'){y--;step++;}
			else if(pic[x][y]=='E'){y++;step++;}
		}
		if(k){
			cout<<step-1<<" step(s) to exit"<<endl;
		}
		cin>>n>>m>>s;
	}	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41333528/article/details/80277528