hdu 1035 Robot Motion (DP)

1083 ワード

クリックしてリンクを開く
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); else printf("%d step(s) before a loop of %d step(s)
",n,m); scanf("%d%d%d",&N,&S,&E); } }