记录编号 43841 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 [USACO Oct07] 障碍训练场 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.186 s
提交时间 2012-10-14 17:36:55 内存使用 3.20 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;

char map[110][110];
int f[110][110];

int minint(int a,int b)
{
	if (a>b)
		return(b);
	return(a);
}

int main(void)
{
	freopen("obstacle.in","r",stdin);
	freopen("obstacle.out","w",stdout);
	int i,j,n,xe,ye,x,y,tim;
	cin>>n;
	for (i=1;i<=n;i++)
		for (j=1;j<=n;j++)
		{
			f[i][j]=100000;
			cin>>map[i][j];
			if (map[i][j]=='A')
			{
				map[i][j]='.';
				f[i][j]=1;
			}
			if (map[i][j]=='B')
			{
				map[i][j]='.';
				xe=i;
				ye=j;
			}
//			if (map[i][j]=='x')
//				map[i][j]=0;
		}
	tim=1;
	while (1==1)
	{
		for (i=1;i<=n;i++)
			for (j=1;j<=n;j++)
				if (f[i][j]==tim)
				{
					x=i-1;
					y=j;
					while (map[x][y]=='.')
					{
						f[x][y]=minint(f[x][y],tim+1);
						x--;
					}
					x=i+1;
					//y=j;
					while (map[x][y]=='.')
					{
						f[x][y]=minint(f[x][y],tim+1);
						x++;
					}
					x=i;
					y=j-1;
					while (map[x][y]=='.')
					{
						f[x][y]=minint(f[x][y],tim+1);
						y--;
					}
					//x=i;
					y=j+1;
					while (map[x][y]=='.')
					{
						f[x][y]=minint(f[x][y],tim+1);
						y++;
					}
				}
		if (f[xe][ye]!=100000)
		{
			cout<<f[xe][ye]-2<<endl;
			break;
		}
		tim++;
	}
	return(0);
}