比赛 20130729 评测结果 AAAAAAAAAA
题目名称 激光电话 最终得分 100
用户昵称 1azyReaper 运行时间 0.004 s
代码语言 C++ 内存使用 0.37 MiB
提交时间 2014-07-17 08:58:15
显示代码纯文本
#include <fstream>
using namespace std;
ifstream fin("lphone.in");
ofstream fout("lphone.out");
char map[110][110];
int f[110][110];
int check(int a,int b)
{
	if(a>b)
		return b;
	return a;
}
int main()
{
	int i=0,j=0,h=0,w=0,xe=0,ye=0,x=0,y=0,tim=0;
	bool flag=1;
	fin>>w>>h;
	for (i=1;i<=h;i++)
	{	for (j=1;j<=w;j++)
		{
			f[i][j]=100000;
			fin>>map[i][j];
			if(map[i][j]=='C')
			{
				map[i][j]='.';
				if(flag==1)
					f[i][j]=1,flag=0;
				else
					xe=i,ye=j;
			}
		}
	}
	tim=1;
	for(;;)
	{
		for(i=1;i<=h;i++)
			for(j=1;j<=w;j++)
				if(f[i][j]==tim)
				{
					x=i-1,y=j;
					while(map[x][y]=='.')//总之就是四个方向试
					{
						f[x][y]=check(f[x][y],tim+1);
						x--;
					}
					x=i+1;
					while(map[x][y]=='.')
					{
						f[x][y]=check(f[x][y],tim+1);
						x++;
					}
					x=i;
					y=j-1;
					while (map[x][y]=='.')
					{
						f[x][y]=check(f[x][y],tim+1);
						y--;
					}
					y=j+1;
					while (map[x][y]=='.')
					{
						f[x][y]=check(f[x][y],tim+1);
						y++;
					}
				}
		if(f[xe][ye]!=100000&&f[xe][ye]!=0)
			{fout<<f[xe][ye]-2<<endl;break;}
		if(f[xe][ye]==0)
			{fout<<0<<endl;break;}
		tim++;
	}
	fin.close();
	fout.close();
	return 0;
}