Cod sursa(job #2297898)

Utilizator valeriucaraselCarasel Valeriu valeriucarasel Data 6 decembrie 2018 19:18:03
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>

using namespace std;

const int N=105;
const int dl[]={-1,-1,0,1,1,1,0,-1};
const int dc[]={0,1,1,1,0,-1,-1,-1};
int n,m,mr[N][N],mj[N][N];
char a[N][N];

struct poz
{
    int l,c;
};
poz q[N*N],pozstartr,pozstartj,pozstop,x,y;

int main()
{
    ifstream in("rj.in");
    ofstream out("rj.out");
    in>>n>>m;
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=m;j++)
        {
            in>>a[i][j];
            if (a[i][j]=='R')
            {
                pozstartr.l=i;
                pozstartr.c=j;
            }
            if (a[i][j]=='J')
            {
                pozstartj.l=i;
                pozstartj.c=j;
            }
        }
    }
    int st=0,dr=-1;
    q[++dr]=pozstartr;
    while (st<=dr)
    {
        x=q[st++];
        for (int i=0;i<8;i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if (mr[y.l][y.c]==0 && a[y.l][y.c]==' ')
            {
                q[++dr]=y;
                mr[y.l][y.c]=1+mr[x.l][x.c];
            }
        }
    }
    for (int i=st;i<=dr;i++)
    q[i].l=q[i].c=0;
    st=0;
    dr=-1;
    q[++dr]=pozstartj;
    while (st<=dr)
    {
        x=q[st++];
        for (int i=0;i<8;i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if (mj[y.l][y.c]==0 && a[y.l][y.c]==' ')
            {
                q[++dr]=y;
                mj[y.l][y.c]=1+mj[x.l][x.c];
            }
        }
    }
    int minim=101,ik,jk;
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=m;j++)
        {
            if (mr[i][j]==mj[i][j])
            {
                if (minim<mr[i][j])
                {
                    ik=i;
                    jk=j;
                    minim=mr[i][j];
                }
            }
        }
    }
    out<<ik<<" "<<jk<<" "<<minim;
    in.close();
    out.close();
    return 0;
}