Cod sursa(job #1702818)

Utilizator acomAndrei Comaneci acom Data 15 mai 2016 16:28:53
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include<fstream>
#include<queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct cel
{
    int l,c;
} x,y;
queue <cel> q;
int n,m,R[102][102],J[102][102],Xr,Yr,Xj,Yj,minim(100000),xm,ym;
int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1};
char a[102][102];
void citire()
{
    int i,j;
    f>>n>>m; f.get();
    for (i=1;i<=n;++i)
    {
        for (j=1;j<=m;++j)
        {
            f.get(a[i][j]);
            if (a[i][j]=='R')
                Xr=i, Yr=j;
            if (a[i][j]=='J')
                Xj=i, Yj=j;
        }
        f.get();
    }
}
void bordare()
{
    int i;
    for (i=0;i<=n+1;++i)
        a[i][0]=a[i][m+1]='X';
    for (i=0;i<=m+1;++i)
        a[0][i]=a[n+1][0]='X';
}
void lee(int lp, int cp, int v[][102])
{
    int i,lv,cv;
    v[lp][cp]=1;
    x.l=lp; x.c=cp;
    q.push(x);
    while (!q.empty())
    {
        x=q.front(); q.pop();
        for (i=0;i<8;++i)
        {
            lv=x.l+dx[i], cv=x.c+dy[i];
            if (a[lv][cv]==' ' && !v[lv][cv])
            {
                y.l=lv; y.c=cv;
                q.push(y);
                v[lv][cv]=1+v[x.l][x.c];
            }
        }
    }
}
int main()
{
    int i,j;
    citire(); bordare();
    lee(Xr,Yr,R); lee(Xj,Yj,J);
    for (i=1;i<=n;++i)
        for (j=1;j<=m;++j)
            if (R[i][j]==J[i][j] && a[i][j]==' ' && R[i][j])
                if (minim>R[i][j])
                    minim=R[i][j], xm=i, ym=j;
    g<<minim<<" "<<xm<<" "<<ym<<'\n';
    return 0;
}