Cod sursa(job #2298105)

Utilizator CosaMateiMatei Cosa Gabriel CosaMatei Data 7 decembrie 2018 13:32:59
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2 kb
#include <bits/stdc++.h>

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=100;
const int M=100;

struct poz
{
    int l;
    int c;
};

poz q[N*M],x,y,poz_r,poz_j;
int n,m,dr[N+1][M+1],dj[N+1][M+1];

char s[N+1];

void citire()
{
    in>>n>>m>>ws;
    for(int i=1; i<=n; ++i)
    {
        in.getline(s+1,N+1);
        for(int j=1; s[j]; j++)
        {
            if(s[j]=='X')
            {
                dr[i][j]=dj[i][j]=-1;
            }
            else if(s[j]=='R')
            {
                dr[i][j]=1;
                poz_r.l=i;
                poz_r.c=j;
            }
            else if(s[j]=='J')
            {
                dj[i][j]=1;
                poz_j.l=i;
                poz_j.c=j;
            }
        }
    }
}

void bordare(int a[N+1][M+1])
{
    for(int i=0; i<=n+1; ++i)
    {
        a[i][0]=a[i][n+1]=-1;
    }
    for(int j=0; j<=m+1; ++j)
    {
        a[0][j]=a[n+1][j]=-1;
    }
}

void lee(int a[N+1][M+1], poz pozstart)
{
    int st=0;
    int dr=-1;
    q[++dr]=pozstart;
    a[pozstart.l][pozstart.c]=1;
    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(a[y.l][y.c]==0)
            {
                q[++dr]=y;
                a[y.l][y.c]=1+a[x.l][x.c];
            }
        }
    }
}

int solve()
{
    poz ans;
    int t=200;
    for(int i=1; i<=n; ++i)
    {
        for(int j=1; j<=m; ++j)
        {
            if(dr[i][j]>0 && dr[i][j]==dj[i][j] && dr[i][j]<t)
            {
                ans.l=i;
                ans.c=j;
                t=dr[i][j];
            }
        }
    }
    out<<t<<" "<<ans.l<<" "<<ans.c;
}

int main()
{
    citire();
    bordare(dr);
    bordare(dj);
    lee(dr,poz_r);
    lee(dj,poz_j);
    solve();
    return 0;
}