Cod sursa(job #1630804)

Utilizator ardeleanadrianArdelean Adrian-Florin ardeleanadrian Data 5 martie 2016 11:24:15
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
ifstream fin("rj.in");ofstream fout("rj.out");
int dl[8]={-1,-1,0,1,1,1,0,-1},dc[8]={0,1,1,1,0,-1,-1,-1},i,j,minix,miniy,xr,yr,xj,yj,ro[101][101],ju[101][101],n,m,inc,sf,mini=2000000000;
char s[101];
struct rj
{
    int c,l,d;
}C[10201],x,y;
void romeo()
{
    ro[xr][yr]=1;
    C[inc].l=xr;
    C[inc].c=yr;
    while (inc<=sf)
    {
        x=C[inc++];
        for (i=0;i<=7;i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if (ro[y.l][y.c]==-2)
            {
                ro[y.l][y.c]=ro[x.l][x.c]+1;
                C[++sf]=y;
            }
        }
    }
}
void julieta()
{
    inc=sf=0;
    ju[xj][yj]=1;
    C[inc].l=xj;
    C[inc].c=yj;
    while (inc<=sf)
    {
        x=C[inc++];
        for (i=0;i<=7;i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if (ju[y.l][y.c]==-2)
            {
                ju[y.l][y.c]=ju[x.l][x.c]+1;
                C[++sf]=y;
            }
        }
    }
}
int main()
{
    fin>>n>>m;fin.getline(s,101);
    for (i=1;i<=n;i++)
    {
        fin.getline(s,101);
        for (j=0;j<m;j++)
        {
            if (s[j]=='J')
            {
                xj=i;
                yj=j+1;
                ro[i][j+1]=ju[i][j+1]=-2;
            }
            else if (s[j]=='R')
            {
                xr=i;
                yr=j+1;
                ro[i][j+1]=ju[i][j+1]=-2;
            }
            else if (s[j]=='X') ro[i][j+1]=ju[i][j+1]=-1;
            else ro[i][j+1]=ju[i][j+1]=-2;
        }
    }
    romeo();
    julieta();
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {
            if(ro[i][j]==ju[i][j]&&ro[i][j]>0&&ju[i][j]>0)
                if(ro[i][j]<mini)
                {
                    mini=ro[i][j];
                    minix=i;
                    miniy=j;
                }
        }
    fout<<mini<<' '<<minix<<' '<<miniy;
    return 0;
}