Cod sursa(job #1857565)

Utilizator alexdaduBucurica Alexandru alexdadu Data 26 ianuarie 2017 13:17:13
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream in ("rj.in");
ofstream out ("rj.out");

struct nod
{
    int l,c;
};

nod Q[1000];
int xr,yr,xj,yj,n,m,a[110][110],b[110][110];
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
void load()
{
    char s[110];
    int i,j;

    in>>n>>m; in.get();

    for(i=0; i<=n+1; i++)
        {
            for(j=0; j<=m+1; j++)
            {
                if(i==0 || i==n+1 || j==0 || j==n+1) b[i][j]=a[i][j]=-1;
                else b[i][j]=a[i][j]=0;
            }
        }
        for(i=1; i<=n; i++)
        {
            in.getline(s,110);
            for(j=0; j<m; j++)
            {
                if(s[j]=='X') a[i][j+1]=b[i][j+1]=-1;
                else
                {
                    if(s[j]=='R') {a[i][j+1]=1; xr=i; yr=j+1;}
                else
                {
                    if(s[j]=='J') {b[i][j+1]=1, xj=i; yj=j+1;}
                }
                }
            }

        }

}



void lee (int xi, int yi, int a[110][110])
{
    int p,u,i,x,y,xx,yy;
    a[xi][yi]=1;
    Q[1].l=xi,Q[1].c=yi;
    p=u=1;
    while(p<=u)
    {
        x=Q[p].l;
        y=Q[p].c;
        for(i=0; i<8; i++)
        {
            xx=x+dx[i];
            yy=y+dy[i];
            if(a[xx][yy]==0)
            {
                u++;
                Q[u].l=xx; Q[u].c=yy;
                a[xx][yy]=a[x][y]+1;
            }
        }
        p++;
    }
}

int main()
{
    int i,j,p1=0,p2=0;

    load();

    int mini=n*m;

    lee(xr,yr,a);
    lee(xj,yj,b);

    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            if(a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<mini) {mini=a[i][j], p1=i; p2=j;}
        }
    }

    out<<mini<<" "<<p1<<" "<<p2;


    return 0;
}