Cod sursa(job #2488104)

Utilizator mateihMatei Hristodorescu mateih Data 6 noiembrie 2019 09:47:16
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.04 kb
#include<iostream>
#include<stdio.h>

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[40000];

ase j,r;

int a[202][202],b[202][202];

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

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[m+1][i]=-1;
}
asta=getchar();
for(int i=1;i<=n;i++){
    for(int jj=1;jj<=m;jj++){
        asta=getchar();
        if(asta=='X')
            a[i][jj]=-1;
        if(asta=='J'){
            j.l=i;
            j.c=jj;
        }
        if(asta=='R'){
            r.l=i;
            r.c=jj;
        }
    }
    asta=getchar();
}
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;
}