Cod sursa(job #2488136)

Utilizator mateihMatei Hristodorescu mateih Data 6 noiembrie 2019 10:21:02
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.09 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;
}