hdu 1035 (模拟)

题意:给你一个图,然后每个点有个方向,问你什么时间能出去吗,或者什么时间形成一个循环。

题解:模拟一下即可。

注意这组数据:

2 2 1

SW

EN

应该输出:0 step(s) before a loop of 4 step(s)

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

int a[100005];
	int t,n;
int check()
{
	for(int i=2;i<=n;i++)
	if(a[i]!=a[i-1]) return 1;
	return 0;
}
char map[105][105];int vis[105][105];
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		int k;
		if(n==0&&m==0)break;cin>>k;
		for(int i=1;i<=n;i++)cin>>map[i]+1;
		int x=1,y=k;
		int ans=0;
		memset(vis,0,sizeof(vis));
		int ans1=0;int flag=0;
		while(1)
		{
			if(x<1||x>n||y<1||y>m) break;
			if(vis[x][y]!=0||(x==1&&y==k&&ans!=0))
			{
				flag=1;
				ans1=vis[x][y];break;
			}
			vis[x][y]=ans;
			ans++;
			if(map[x][y]=='N'){
				x--;
			}
			else if(map[x][y]=='S')
			{
				x++;
			}
			else if(map[x][y]=='W')
			{
				y--;
			}
			else y++;
		}
		if(flag==0)
		printf("%d step(s) to exit\n",ans);
		else
		{
			printf("%d step(s) before a loop of %d step(s)\n",ans1,ans-ans1);
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37632935/article/details/80071871