Cod sursa(job #1887503)

Utilizator sabinantonSabin Anton sabinanton Data 21 februarie 2017 17:12:30
Problema Barbar Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream fin("barbar.in");
ofstream fout("barbar.out");
const int N=101;
int x[10001],y[100001],a[N][N],n,m,r=0,k,f1,f2;
int dist(int i,int j)
{
    int mn=10000000;
    for(int h=1;h<=k;h++)
    {
        long long d=abs(x[h]-i)+abs(y[h]-j)+1;
        //cout<<d<<" ";
        if(mn>d)mn=d;
    }//cout<<endl<<mn<<endl;
    return mn;
}
void par(int i, int j, int mn)
{
    if(a[i][j]==1||a[i][j]==2||a[i][j]==4||a[i][j]==9)return;
    if(i>n||i<1||j>m||j<1||(i==f1&&j==f2)){
            if(r<mn)r=mn;
            return;
    }
    a[i][j]=9;
    if(dist(i,j)<mn)mn=dist(i,j);
    par(i,j+1,mn);
    par(i,j-1,mn);
    par(i-1,j,mn);
    par(i+1,j,mn);
}
int main()
{
    int i,j,st1,st2;
    char c;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fin>>c;
            if(c=='.')a[i][j]=0;
            if(c=='*')a[i][j]=1;
            if(c=='D')
            {
                x[++k]=i;
                y[k]=j;
                a[i][j]=2;
            }
            if(c=='I')
            {
                st1=i;
                st2=j;
                a[i][j]=3;
            }
            else if(c=='F')
            {
                f1=i;
                f2=j;
                a[i][j]=4;
            }
        }
    }
    par(st1,st2,100000);

    fout<<r;
    return 0;
}