Cod sursa(job #2059438)

Utilizator cristicioteiCiotei Cristian cristiciotei Data 6 noiembrie 2017 23:54:05
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.42 kb
#include <iostream>
#include <cstdio>
#include <stdio.h>
using namespace std;
int directieL[8]={-1,-1,0,1,1,1,0,-1};
int directieC[8]={0,1,1,1,0,-1,-1,-1};
int r[101][101];
int j[101][101];
int coadarL[10000],coadarC[10000];
int coadajL[10000],coadajC[10000];

int main()
{
    freopen ("rj.in","r",stdin);
    freopen ("rj.out","w",stdout);
    int n,m;
    char a='a';
    cin>>n>>m;
    a=getchar();
    a='a';
    for (int i=0 ; i<=n+1 ; i++)
    {
        r[i][0]=-1;
        j[i][0]=-1;
        r[i][m+1]=-1;
        j[i][m+1]=-1;
    }
    for (int i=0 ; i<=m+1 ; i++)
    {
        r[0][i]=-1;
        j[0][i]=-1;
        r[n+1][i]=-1;
        j[n+1][i]=-1;
    }
    int j1=1;
    for (int i=1 ; i<=n ; i++)
    {
        j1=1;
        a='a';
       while (a!='\n')

    {
            a=getchar();
            if (a=='X')
            {
                r[i][j1]=-1;
                j[i][j1]=-1;
            }
            if (a=='R')
            {
                coadarL[1]=i;
                coadarC[1]=j1;
                r[i][j1]=1;
            }
            if (a=='J')
            {
                coadajL[1]=i;
                coadajC[1]=j1;
                j[i][j1]=1;
            }
            j1++;
    }
    }
    int ic=1,sf=1;
    int l,c;
    while (ic<=sf)
    {
        for (int i=0 ; i<8 ; i++)
        {
            l=coadarL[ic]+directieL[i];
            c=coadarC[ic]+directieC[i];
            if (r[l][c]==0)
            {
                r[l][c]=r[coadarL[ic]][coadarC[ic]]+1;
                sf++;
                coadarL[sf]=l;
                coadarC[sf]=c;
            }
        }
        ic++;
    }
    ic=1;sf=1;
    while (ic<=sf)
    {
        for (int i=0 ; i<8 ; i++)
        {
            l=coadajL[ic]+directieL[i];
            c=coadajC[ic]+directieC[i];
            if (j[l][c]==0)
            {
                j[l][c]=j[coadajL[ic]][coadajC[ic]]+1;
                sf++;
                coadajL[sf]=l;
                coadajC[sf]=c;
            }
        }
        ic++;
    }
    int min=101;
    int x1,y1;
    for (int i=1 ; i<=n ; i++)
        for (int j1=1 ; j1<=m ; j1++)
    {
        if (r[i][j1]==j[i][j1] && r[i][j1]>0 && r[i][j1]>0)
            if (min>r[i][j1])
        {
            min=r[i][j1];
            x1=i;
            y1=j1;
        }
    }
    cout<<min<<" "<<x1<<" "<<y1;

    return 0;
}