Cod sursa(job #2112160)

Utilizator vladstanciuVlad Stanciu vladstanciu Data 23 ianuarie 2018 09:46:17
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <fstream>
#include <cstring>

using namespace std;

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

const int dl[]= {-1,0,1,0,-1,-1,1,1};
const int dc[]= {0,1,0,-1,-1,1,1,-1};
const int N=102;
char v[N][N];
int r[N][N];
int J[N][N];
struct cord
{
    int l;
    int c;
};
cord q[N*N];

int main()
{
    int n,m,i,j,st=0,dr=-1,min1=10000000,c1,c2;
    cord rom,jul,x,y;
    in>>n>>m>>ws;
    for(i=1 ; i<=n ; i++)
    {
        in.getline(1+v[i],N);
        for(j=1 ; j<=m ; j++)
        {
            if(v[i][j]==' ')
            {
                r[i][j]=-2;
                J[i][j]=-2;
            }
            else if(v[i][j]=='X')
            {
                r[i][j]=-1;
                J[i][j]=-1;
            }
            else if(v[i][j]=='R')
            {
                r[i][j]=0;
                J[i][j]=-3;
                rom.l=i;
                rom.c=j;
            }
            else if(v[i][j]=='J')
            {
                r[i][j]=-4;
                J[i][j]=0;
                jul.l=i;
                jul.c=j;
            }
        }
    }
    q[++dr]=rom;
    while(st<=dr)
    {
        x=q[st++];
        for(i=0 ; i<8 ; ++i)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if(r[y.l][y.c]==-2)
            {
                q[++dr]=y;
                r[y.l][y.c]=r[x.l][x.c]+1;
            }
        }
    }

    st=0;
    dr=-1;
    q[++dr]=jul;
    while(st<=dr)
    {
        x=q[st++];
        for(i=0 ; i<8 ; ++i)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if(J[y.l][y.c]==-2)
            {
                q[++dr]=y;
                J[y.l][y.c]=J[x.l][x.c]+1;
            }
        }
    }
    for(i=1 ; i<=n ; i++)
    {
        for(j=1 ; j<=m ; j++)
        {
            if(r[i][j]==J[i][j] && r[i][j]>0)
            {
                if(r[i][j]<min1)
                {
                    min1=r[i][j];
                    c1=i;
                    c2=j;
                }
            }
        }
    }
    out<<min1+1<<" "<<c1<<" "<<c2;
    return 0;
}