Cod sursa(job #2389390)

Utilizator Vaida_Radu_AndreiVaida Radu Andrei Vaida_Radu_Andrei Data 27 martie 2019 08:33:29
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.23 kb
#include <cstdio>
#include <queue>
FILE* FIN=freopen("rj.in","r",stdin);
FILE* FOUT=freopen("rj.out","w",stdout);
using namespace std;

long int n,m,a[112][112],a1[112][112],a2[112][112];
struct crd
{
    int x,y;
}r,jr,d[4]={0,1,0,-1,1,0,-1,0};
queue <crd> q;

void dcd(char x,int i,int j)
{
    if(x==' ')
    {
        a[i][j]=0;
        return;
    }
    if(x=='X')
    {
        a[i][j]=-1;
        return;
    }
    if(x=='R')
    {
        a[i][j]=0;
        r.x=i;
        r.y=j;
        return;
    }
    a[i][j]=0;
    jr.x=i;
    jr.y=j;
}
void cit()
{
    char x;
    int i,j;
    scanf("%d%d\n",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            scanf("%c",&x);
            dcd(x,i,j);
        }
        scanf("\n");
    }
}
void bord()
{
    int i;
    for(i=0;i<=n+1;i++)
    {
        a[i][0]=-1;
        a[i][n+1]=-1;
    }
    for(i=0;i<=m+1;i++)
    {
        a[0][i]=-1;
        a[n+1][i]=-1;
    }
}
void play1(crd p)
{
    int i;
    crd c,l;
    q.push(p);
    while(!q.empty())
    {
        c=q.front();
        q.pop();
        for(i=0;i<4;i++)
        {
            l.x=c.x+d[i].x;
            l.y=c.y+d[i].y;
            if(a[l.x][l.y]==0&&a1[l.x][l.y]==0)
            {
                a1[l.x][l.y]=a1[c.x][c.y]+1;
                q.push(l);
            }
        }
    }
    a1[p.x][p.y]=0;
}
void play2(crd p)
{
    int i;
    crd c,l;
    q.push(p);
    while(!q.empty())
    {
        c=q.front();
        q.pop();
        for(i=0;i<4;i++)
        {
            l.x=c.x+d[i].x;
            l.y=c.y+d[i].y;
            if(a[l.x][l.y]==0&&a2[l.x][l.y]==0)
            {
                a2[l.x][l.y]=a2[c.x][c.y]+1;
                q.push(l);
            }
        }
    }
    a2[p.x][p.y]=0;
}
void fnd()
{
    int i,j,sol=11024;
    crd s;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if((a1[i][j]==a2[i][j])&&(a1[i][j]<sol)&&a1[i][j])
            {
                sol=a1[i][j];
                s.x=i;
                s.y=j;
            }
    printf("%d %d %d",sol,s.x,s.y);
}
int main()
{
    cit();
    bord();
    play1(r);
    play2(jr);
    fnd();
    return 0;
}