Cod sursa(job #2495363)

Utilizator dolhasca001Birleanu Matei dolhasca001 Data 19 noiembrie 2019 11:20:34
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.54 kb
#include<iostream>
#include<stdio.h>
#include<algorithm>

using namespace std;



int dirl[8]= {-1,-1,0,1,1,1,0,-1};
int dirc[8]= {0,1,1,1,0,-1,-1,-1};

struct ase
{
    int l,c;
};
ase coada[10100];

ase j,r;

int a[102][102],b[102][102];

char asta[102];

int main ()
{
    int n,m,inceput,sfarsit,minim=100000,sl=0,sc=0;


    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    cin>>n>>m;

///bordare
    for(int i=0; i<=n+1; i++)
    {
        a[i][0]=-1;
        a[i][m+1]=-1;
    }
    for(int i=0; i<=m+1; i++)
    {
        a[0][i]=-1;
        a[n+1][i]=-1;
    }
    cin.getline(asta,101);
    for(int i=1; i<=n; i++)
    {
        cin.getline(asta,101);
        for(int jj=0; asta[jj]!='\0'; jj++)
        {
            if(asta[jj]=='X')
                a[i][jj+1]=-1;
            if(asta[jj]=='J')
            {
                j.l=i;
                j.c=jj+1;
            }
            if(asta[jj]=='R')
            {
                r.l=i;
                r.c=jj+1;
            }
        }
    }


    for(int i=0; i<=n+1; i++)
        for(int j=0; j<=m+1; j++)
            b[i][j]=a[i][j];

    a[j.l][j.c]=1;
    inceput=1;
    sfarsit=1;
    coada[1].l=j.l;
    coada[1].c=j.c;
    while(inceput<=sfarsit)
    {
        for(int i=0; i<8; i++)
        {
            int lin=coada[inceput].l+dirl[i];
            int col=coada[inceput].c+dirc[i];
            if(a[lin][col]==0)
            {
                sfarsit++;
                a[lin][col]=a[coada[inceput].l][coada[inceput].c]+1;
                coada[sfarsit].l=lin;
                coada[sfarsit].c=col;
            }
        }
        inceput++;
    }

    b[r.l][r.c]=1;
    inceput=1;
    sfarsit=1;
    coada[1].l=r.l;
    coada[1].c=r.c;
    while(inceput<=sfarsit)
    {
        for(int i=0; i<8; i++)
        {
            int lin=coada[inceput].l+dirl[i];
            int col=coada[inceput].c+dirc[i];
            if(b[lin][col]==0)
            {
                sfarsit++;
                b[lin][col]=b[coada[inceput].l][coada[inceput].c]+1;
                coada[sfarsit].l=lin;
                coada[sfarsit].c=col;
            }
        }
        inceput++;
    }
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(a[i][j]==b[i][j]&&a[i][j]>0)
                if(a[i][j]<minim)
                {
                    minim=a[i][j];
                    sl=i;
                    sc=j;
                }
    cout<<minim<<" "<<sl<<" "<<sc;

    return 0;
}