Cod sursa(job #1633611)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 6 martie 2016 12:31:29
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.28 kb
#include<stdio.h>
using namespace std;
int ar[226][226],aj[256][256],linie[8],coloana[8];
struct coadda{int lin,col;};
coadda coada[65025];
int main(){
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    int n,m,i,j,ic,sf,l,c,nr,min=100000,minx,miny,linr,colr,colj,linj;
    char C;
    linie[0]=-1;
    linie[1]=-1;
    linie[2]=0;
    linie[3]=1;
    linie[4]=1;
    linie[5]=1;
    linie[6]=0;
    linie[7]=-1;
    coloana[0]=0;
    coloana[1]=1;
    coloana[2]=1;
    coloana[3]=1;
    coloana[4]=0;
    coloana[5]=-1;
    coloana[6]=-1;
    coloana[7]=-1;
    scanf("%d%d",&n,&m);
    scanf("%c",&C);
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            scanf("%c",&C);
            if(C=='X'){
                ar[i][j]=-1;
                aj[i][j]=-1;
            }
            if(C=='R'){
                linr=i;
                colr=j;
                ar[i][j]=1;
            }
            if(C=='J'){
                linj=i;
                colj=j;
                aj[i][j]=1;
            }
        }
        scanf("%c",&C);
    }
    ic=sf=1;
    coada[ic].lin=linr;
    coada[ic].col=colr;
    while(ic<=sf){
        for(i=0;i<8;i++){
            l=coada[ic].lin+linie[i];
            c=coada[ic].col+coloana[i];
            if(l>=1&&l<=n&&c>=1&&c<=m&&ar[l][c]==0){
                sf++;
                coada[sf].lin=l;
                coada[sf].col=c;
                ar[l][c]=ar[coada[ic].lin][coada[ic].col]+1;
            }
        }
        ic++;
    }
    ic=sf=1;
    coada[ic].lin=linj;
    coada[ic].col=colj;
    while(ic<=sf){
        for(i=0;i<8;i++){
            l=coada[ic].lin+linie[i];
            c=coada[ic].col+coloana[i];
            if(l>=1&&l<=n&&c>=1&&c<=m&&aj[l][c]==0){
                sf++;
                coada[sf].lin=l;
                coada[sf].col=c;
                aj[l][c]=aj[coada[ic].lin][coada[ic].col]+1;
            }
        }
        ic++;
    }
    nr=0;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(ar[i][j]>0&&aj[i][j]>0&&ar[i][j]==aj[i][j])
                if(aj[i][j]<min){
                    min=aj[i][j];
                    minx=i;
                    miny=j;
                }
    printf("%d %d %d",min,minx,miny);
    return 0;
}