比赛 20130729 评测结果 AAAAAAAAAA
题目名称 激光电话 最终得分 100
用户昵称 (⊙o⊙)… 运行时间 0.005 s
代码语言 C++ 内存使用 0.37 MiB
提交时间 2014-07-17 10:15:11
显示代码纯文本
#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("lphone.in","r",stdin);
	freopen("lphone.out","w",stdout);
	int i,j,h,w,xe,ye,x,y,tim;
	bool flag=true;
	cin>>w>>h;
	for (i=1;i<=h;i++)
		for (j=1;j<=w;j++)
		{
			f[i][j]=100000;
			cin>>map[i][j];
			if (map[i][j]=='C')
			{
				map[i][j]='.';
				if (flag)
				{
					f[i][j]=1;
					flag=false;
				}
				else
				{
					xe=i;
					ye=j;
				}
			}
//			if (map[i][j]=='*')
//				map[i][j]=0;
		}
	tim=1;
	while (1==1)
	{
		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]=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);
}