比赛 20130729 评测结果 AAAAAAAAAA
题目名称 激光电话 最终得分 100
用户昵称 ok 运行时间 0.004 s
代码语言 C++ 内存使用 0.33 MiB
提交时间 2014-07-17 08:37:50
显示代码纯文本
    #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;
    }