Cod sursa(job #2473573)

Utilizator stetcoclaudiuStetco Claudiu stetcoclaudiu Data 13 octombrie 2019 20:41:37
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.27 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
queue<pair<int,int> >q1,q2;
int di[9]={-1,-1,0,1,1,1,0,-1};
int dj[9]={0,1,1,1,0,-1,-1,-1};
int v[105][105][2],i,j,ir,jr,ij,jj,n,m;
char c[105];
int main()
{
    fin>>n>>m;
    fin.getline(c,105);
    for(i=1;i<=n;i++)
    {
        fin.getline(c,105);
        for(j=0;j<m;j++)
        {
            if(c[j]=='X')
            v[i][j+1][0]=-1;
            else
                if(c[j]=='R')
            {
                ir=i;
                jr=j+1;
            }
            else
                if(c[j]=='J')
            {
                ij=i;
                jj=j+1;
            }
        }
    }
    v[ir][jr][0]=1;
    v[ir][jr][1]=1;
    v[ij][jj][0]=1;
    v[ij][jj][1]=2;
    q1.push(make_pair(ir,jr));
    q2.push(make_pair(ij,jj));
    while(!q1.empty() && !q2.empty())
    {
        int i1=q1.front().first,j1=q1.front().second,i2=q2.front().first,j2=q2.front().second;
        q1.pop();
        q2.pop();
        for(int d=0;d<8;d++)
        {
            int in=i1+di[d];
            int jn=j1+dj[d];
            if(in>0&&jn>0&&in<=n&&jn<=m&&v[in][jn][0]==0)
            {
                q1.push(make_pair(in,jn));
                v[in][jn][0]=v[i1][j1][0]+1;
                v[in][jn][1]=1;
            }
            if(v[in][jn][1]==2)
            {
                while(!q1.empty() && !q2.empty())
                {
                    q1.pop();
                    q2.pop();
                }
                fout<<v[in][jn][0]+1<<" "<<i1<<" "<<j1;
            }
        }
        for(int d=0;d<8;d++)
        {
            int in=i2+di[d];
            int jn=j2+dj[d];
            if(in>0&&jn>0&&in<=n&&jn<=m&&v[in][jn][0]==0)
            {
                q2.push(make_pair(in,jn));
                v[in][jn][0]=v[i2][j2][0]+1;
                v[in][jn][1]=2;
            }
            if(v[in][jn][1]==1)
            {
                while(!q1.empty() && !q2.empty())
                {
                    q1.pop();
                    q2.pop();
                }
                fout<<v[in][jn][0]+1<<" "<<i2<<" "<<j2;
            }
        }
    }

    return 0;
}