Cod sursa(job #1840725)

Utilizator alesalexandru chirila ales Data 4 ianuarie 2017 19:28:18
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
# include <iostream>
# include <fstream>
# include <queue>
using namespace std;

int ro[101][101],ju[101][101],dl[]= {0,0,1,-1,1,-1,-1,1},dc[]= {1,-1,0,0,1,-1,1,-1},n,m,xr,yr,xj,yj;
char ch;

queue <pair <int,int> > c;

ifstream f("rj.in");
ofstream g("rj.out");

void cit()
{
    f>>n>>m;
    f.get();
    for(int i=1; i<=n; ++i)
    {
        for(int j=1; j<=m; ++j)
        {
            f.get(ch);
            if(ch=='X')ro[i][j]=ju[i][j]=-1;
            if(ch=='R'){xr=i;yr=j;}
            if(ch=='J'){xj=i;yj=j;}
        }
        f.get();
    }

}

bool ok(int i,int j)
{
    if(ro[i][j]==-1)return false;
    if(i<1 || j<1 || i>n || j>m)return false;
    return true;
}

void lee(int x,int y,int b[101][101])
{
    int i,j,i_urm,j_urm,dir;
    b[x][y]=1;
    c.push(make_pair(x,y));
    while(c.empty()==0)
    {
        i=c.front().first;
        j=c.front().second;
        c.pop();
        for(dir=0;dir<=7;++dir)
        {
            i_urm=i+dl[dir];
            j_urm=j+dc[dir];
            if(ok(i_urm,j_urm)==true && b[i_urm][j_urm]==0)
            {
                c.push(make_pair(i_urm,j_urm));
                b[i_urm][j_urm]=b[i][j]+1;
            }
        }
    }
}

int main()
{
    int mini=10000,xmin=-1,ymin=-1,i,j;
    cit();
    lee(xr,yr,ro);
    lee(xj,yj,ju);
for(int i=1; i<=n; ++i)
        for(int j=1; j<=m; ++j)
        if(ro[i][j]==ju[i][j] && ro[i][j]>0 && ro[i][j]<mini)
        {
            mini=ro[i][j]; xmin=i; ymin=j;
        }
    g<<mini<<" "<<xmin<<" "<<ymin;
}