Cod sursa(job #2568215)

Utilizator maraboneaMara Bonea marabonea Data 3 martie 2020 21:28:03
Problema Rj Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.53 kb
/**
*/
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
int a[100][100],r[100][100],jul[100][100],x[1000000][2],dl[]= {1, 1, 1, 0, 0, -1, -1, -1},dc[]= {1, 0, -1, 1, -1, 1, 0, -1};
int y[1000000][2];
void drum1(int l,int c,int n,int m)
{

    int p=0;
    int t=0;
    x[0][0]=l;
    x[0][1]=c;
    while(p<=t)
    {
        int i=x[p][0];
        int j=x[p][1];
        for(int k=0; k<8; k++)
        {
            int xx=i+dl[k];
            int yy=j+dc[k];
            if(xx>=0 && xx<n && yy>=0 && yy<m)
            {
                if(r[xx][yy]==0 && a[xx][yy]!=-1)
                {
                    r[xx][yy]=r[i][j]+1;
                    t++;
                    x[t][0]=xx;
                    x[t][1]=yy;
                }
            }
        }
        p++;
    }
}
void drum2(int l,int c,int n,int m)
{
    int f=0;
    int g=0;
    y[0][0]=l;
    y[0][1]=c;
    jul[l][c]=1;
    while(f<=g)
    {
        int i=y[f][0];
        int j=y[f][1];
        for(int k=0; k<8; k++)
        {
            int xx=i+dl[k];
            int yy=j+dc[k];
            if(xx>=0 && xx<n && yy>=0 && yy<m)
            {
                if(jul[xx][yy]==0 && a[xx][yy]!=-1)
                {
                    jul[xx][yy]=jul[i][j]+1;
                    g++;
                    y[g][0]=xx;
                    y[g][1]=yy;
                }
            }
        }
    f++;
    }
}

int main()
{
    ifstream fin("rj.in");
    ofstream fout("rj.out");
    int n,m,i=0,j,lr,cr,lj,cj,minim=1000000,soll,solc;
    char q[100];
    fin>>n>>m;
    fin.getline(q,100);
    while(i<n)
    {
        fin.getline(q,100);
        for(j=0; j<m; j++)
        {
            a[i][j]=0;
            if(q[j]=='X')
                a[i][j]=-1;
            if(q[j]=='R')
            {
                lr=i;
                cr=j;
                r[i][j]=1;
            }
            if(q[j]=='J')
            {
                lj=i;
                cj=j;
                jul[i][j]=1;
            }
        }
        i++;
    }
    drum1(lr,cr,n,m);

    drum2(lj,cj,n,m);

    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(r[i][j]==jul[i][j] && r[i][j]!=0 && a[i][j]!=-1)
            {
                if(r[i][j]<minim )
                {
                    minim=r[i][j];
                    soll=i+1;
                    solc=j+1;
                }
            }
        }
    }
    fout<<minim<<" "<<soll<<" "<<solc;
    return 0;
}