Cod sursa(job #2490722)

Utilizator SimaAlin12Sima Alin SimaAlin12 Data 10 noiembrie 2019 19:36:00
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.84 kb
#include <stdio.h>
#include <queue>
using namespace std;
FILE*f=fopen("rj.in","r");
FILE*g=fopen("rj.out","w");
int di[]={-1,-1,0,1,1,1,0,-1};
int dj[]={0,1,1,1,0,-1,-1,-1};
int n,m,rjm1[110][110],rjm2[110][110],xr,yr,xj,yj;
queue<pair<int,int> >rj1;
queue<pair<int,int> >rj2;
void citire()
{
    fscanf(f,"%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            char c;
            fscanf(f,"%c",&c);
            if(c=='\n')
                fscanf(f,"%c",&c);
            if(c=='X')
                rjm1[i][j]=-1,rjm2[i][j]=-1;
            else
            {
                if(c=='R')
                {
                    xr=i;
                    yr=j;
                }
                if(c=='J')
                {
                    xj=i;
                    yj=j;
                }
            }
        }
}
int ok1(int i,int j)
{
    if(i<1||j<1||i>n||j>m)
        return 0;
    if(rjm1[i][j]==-1)
        return 0;
    return 1;
}
int ok2(int i,int j)
{
    if(i<1||j<1||i>n||j>m)
        return 0;
    if(rjm2[i][j]==-1)
        return 0;
    return 1;
}
void r_j_1()
{
    int i,j,iur,jur;
    rjm1[xr][yr]=1;
    rj1.push(make_pair(xr,yr));
    while(!rj1.empty())
    {
        i=rj1.front().first;
        j=rj1.front().second;
        rj1.pop();
        for(int d=0;d<8;d++)
        {
            iur=i+di[d];
            jur=j+dj[d];
            if(ok1(iur,jur)&&rjm1[iur][jur]<1)
            {
                rjm1[iur][jur]=rjm1[i][j]+1;
                rj1.push(make_pair(iur,jur));

            }

        }
    }
}
void r_j_2()
{
    int i,j,iur,jur;
    rjm2[xj][yj]=1;
    rj2.push(make_pair(xj,yj));
    while(!rj2.empty())
    {
        i=rj2.front().first;
        j=rj2.front().second;
        rj2.pop();
        for(int d=0;d<8;d++)
        {
            iur=i+di[d];
            jur=j+dj[d];
            if(ok2(iur,jur)&&rjm2[iur][jur]<1)
            {
                rjm2[iur][jur]=rjm2[i][j]+1;
                rj2.push(make_pair(iur,jur));
                if(rjm2[iur][jur]==rjm1[iur][jur])
                {
                    fprintf(g,"%d %d %d",iur,jur,rjm2[iur][jur]);
                    return;
                }

            }

        }
    }
}
int main()
{
    citire();
    r_j_1();
    r_j_2();
    //printf("%d",rjm[xj][yj]);
    /*for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            if(rjm1[i][j]!=-1)
                printf(" %d",rjm1[i][j]);
            else
                printf("%d",rjm1[i][j]);
        printf("\n");
    }
    printf("\n");
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            if(rjm2[i][j]!=-1)
                printf(" %d",rjm2[i][j]);
            else
                printf("%d",rjm2[i][j]);
        printf("\n");
    }*/
}