Cod sursa(job #1630949)

Utilizator ryder123321Tudor Floca ryder123321 Data 5 martie 2016 12:11:25
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,i,j,a[101][101],b[101][101],xr,yr,xj,yj,dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1},inc,sfc,mi=2000000000,ml,mc;
char A[255];
struct Element
{
     int l,c,d;
};
Element C[10210], x, y;
void citire()
{
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        f.getline(A,255);
        int l=strlen(A);
        for(j=0;j<l;j++)
        {
            if(A[j]==' ') {a[i][j+1]=-2;b[i][j+1]=-2;}
            if(A[j]=='R') {a[i][j+1]=-2;b[i][j+1]=-2;xr=i;yr=j+1;}
            if(A[j]=='J') {a[i][j+1]=-2;b[i][j+1]=-2;xj=i;yj=j+1;}
            if(A[j]=='X') {a[i][j+1]=-1;b[i][j+1]=-1;}
        }

    }
}
void bordare()
{
    for (i=0;i<=n+1;i++) a[i][0]=a[i][m+1]=-1;
    for (i=0;i<=m+1;i++) a[0][i]=a[n+1][i]=-1;
}
void BruceLee(int a[][101],int x1,int y1)
{

   x.l=x1;x.c=y1;x.d=1; a[x1][y1]=0;C[inc]=x;
    while (inc<=sfc)
    {
        x=C[inc++];
        for (i=0;i<8;i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if (a[y.l][y.c]==-2)
            {
                y.d=x.d+1; a[y.l][y.c]=y.d;
                C[++sfc]=y;
            }
        }
    }
}
void afisare()
{
    for(i=1;i<=n;i++)
        {
        for(j=1;j<=m;j++)
        if(a[i][j]==b[i][j]&&a[i][j]>0&&b[i][j]>0)
        if(mi>a[i][j])
        {
            mi=a[i][j];
            ml=i;
            mc=j;
        }
        }
    g<<mi<<' '<<ml<<' '<<mc;
}
int main()
{
    citire();
    bordare();
    BruceLee(a,xr,yr);
    inc=sfc=0;
    BruceLee(b,xj,yj);
    afisare();
    f.close();
    return 0;
}