Cod sursa(job #1630856)

Utilizator Luca22Ciobanu Luca Luca22 Data 5 martie 2016 11:42:38
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <fstream>
#define DimMaxCoada 10201

using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,tmin,a[101][101],xr,yr,xj,yj,i,j,b[101][101],InC,SfC,mi=2000000000,mil,mic,k;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
char s[149];
struct Romjul
{
    int l,c,d;
};
Romjul C[DimMaxCoada],x,y;
void citire()
{
     f>>n>>m;
    f.getline(s,149);

    for (i=1;i<=n;i++)
    {
        f.getline(s,149);
        for (j=0;j<m;j++)
        {
            if (s[j]=='R')
            {
                xr=i;
                yr=j+1;
                a[i][j+1]=-2;
                b[i][j+1]=-2;
            }
            else if (s[j]=='J')
            {
                xj=i;
                yj=j+1;
                a[i][j+1]=-2;
                b[i][j+1]=-2;
            }
            else if (s[j]=='X') {a[i][j+1]=-1;b[i][j+1]=-1;}
            else {a[i][j+1]=-2;b[i][j+1]=-2;}
        }
    }
}
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];
            mil=i;
            mic=j;
        }
    }
    g<<mi<<' '<<mil<<' '<<mic;
}
void Romica(int a[101][101],int x1,int y1)
{


    x.l=x1;x.c=y1;x.d=1; a[x1][y1]=0;C[InC]=x;
//algoritmul lui LEE
while (InC<=SfC) //parcurg COADA
{
   x=C[InC++]; //EXTRAG UN ELEMENT DIN COADA
//NE DEPLASAM IN CELE 4 DIRECTII
  for (k=0;k<8;k++)
{ y.l=x.l+dx[k];
  y.c=x.c+dy[k];
if (a[y.l][y.c]==-2) //y- POZITIE LIBERA
{
  y.d=x.d+1; a[y.l][y.c]=y.d;
  C[++SfC]=y; //DUC y IN COADA
}
}
}
}

int main()
{

    citire();
    Romica(a,xr,yr);
    InC=SfC=0;
    Romica (b,xj,yj);
    afisare();
    return 0;
}