Cod sursa(job #1632148)

Utilizator mihaelacarinaCzupper Mihaela Carina mihaelacarina Data 5 martie 2016 22:00:19
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,i,j,a[101][101],b[101][101],xr,yr,xj,yj,inc,sfc,mi=2000000000,ml,mc;
int dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1};
char A[255];
struct Element
{
     int l,c,d;
};
Element C[10210], x, y;
void citire()
{
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++)
    {
        fin.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;}
        }
    }
    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 Lee(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;
        }
        }
    fout<<mi<<' '<<ml<<' '<<mc;
}
int main()
{
    citire();
    Lee(a,xr,yr);
    inc=sfc=0;
    Lee(b,xj,yj);
    afisare();
    fin.close();
    return 0;
}