hdu 1035 Robot Motion (DP)

点击打开链接

ps:给你行数r和列数c,以及进入时的列数cc(从上边进入),如果能出来则输出走的步数,如果出不来,输出几步后进入一个循环圈,并输出循环的步数。。。

#include<stdio.h>
main()
{
	int i,j,b[11][11],k,N,S,E,n,m;
	char a[11][11];
	scanf("%d%d%d",&N,&S,&E);
	while(N!=0&&S!=0&&E!=0)
	{
		k=0;
		for(i=0;i<N;i++)
			scanf("%s",a[i]);
		for(i=0;i<N;i++)
			for(j=0;j<S;j++)
				b[i][j]=0;
			n=1;
			m=E;
			b[0][E-1]=1;
			for(i=0;i<N*S*2;i++)
			{
				switch(a[n-1][m-1])
				{
				case 'E': m++; break;
				case 'S': n++; break;
				case 'W': m--; break;
				case 'N': n--; break;
				} 
				b[n-1][m-1]+=1;
				if(n>N||n<1||m>S||m<1)
				{
					k=1;
					break;
				}
			}
			n=m=0;
			for(i=0;i<N;i++)
				for(j=0;j<S;j++)
				{
					if(b[i][j]==1) n++;
					else if(b[i][j]>1) m++;
				}
				if(k==1) printf("%d step(s) to exit\n",n);
				else printf("%d step(s) before a loop of %d step(s)\n",n,m);
				scanf("%d%d%d",&N,&S,&E);
	}
	
}


posted on 2012-10-14 17:39  Slege  阅读(97)  评论(0编辑  收藏  举报

导航