Cod sursa(job #2389487)

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

long long int n,m,a[112][112],a1[112][112],a2[112][112];
struct crd
{
    int x,y;
}r,jr,d[8]={0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1};
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;
        a1[i][j]=1;
        r.x=i;
        r.y=j;
        return;
    }
    a[i][j]=0;
    a2[i][j]=1;
    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<8;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);
            }
        }
    }
}
void play2(crd p)
{
    int i;
    crd c,l;
    q.push(p);
    while(!q.empty())
    {
        c=q.front();
        q.pop();
        for(i=0;i<8;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);
                if(a1[l.x][l.y]==a2[l.x][l.y])
                {
                    printf("%d ",a2[l.x][l.y]);
                    printf("%d %d",l.x,l.y);
                    return;
                }
            }
        }
    }
}
void af1()
{
    int i,j;
    for(i=0;i<=n;i++)
    {
        for(j=0;j<=m;j++)
            printf("%3d",a1[i][j]);
        printf("\n");
    }
    printf("\n\n");
}
void af2()
{
    int i,j;
    for(i=0;i<=n;i++)
    {
        for(j=0;j<=m;j++)
            printf("%3d",a2[i][j]);
        printf("\n");
    }
}
int main()
{
    cit();
    bord();
    play1(r);
    play2(jr);
    return 0;
}