Cod sursa(job #2473828)

Utilizator Tudor2PopescuPopescu Tudor-Cristian Tudor2Popescu Data 14 octombrie 2019 12:58:04
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.63 kb
#include <iostream>
#include <fstream>
#include <string.h>
#include <queue>
using namespace std;
ifstream f("mat.in");
ofstream g("mat.out");
char s[101];
int n,m,i,j,a1[101][101],matr[101][101],matj[101][101],pozi,pozj,minn,ir,jr,ij,jj,a2[101][101];
int dx[8]={1,-1,0,0,-1,-1,1,1};
int dy[8]={0,0,1,-1,-1,1,-1,1};
queue < pair< int,int>> coada;
int verif(int i,int j)
{
    if(i<1 || j<1 || i>n || j>m)
    {
        return false;
    }
    return true;
}
void leer(int x, int y)
{
    matr[x][y]=1;
    coada.push(make_pair(x,y));
    int iurm,jurm,p,i1,j1;
    while(!coada.empty())
    {
        i1=coada.front().first;
        j1=coada.front().second;
        coada.pop();
        for(p=0;p<=7;p++)
        {
            iurm=i1+dx[p];
            jurm=j1+dy[p];
            if(verif(iurm,jurm)==true && a1[iurm][jurm]==0)
            {
                matr[iurm][jurm]=matr[i1][j1]+1;
                coada.push(make_pair(iurm,jurm));
            }
        }
    }
}
void leej(int x, int y)
{
    matj[x][y]=1;
    coada.push(make_pair(x,y));
    int iurm,jurm,i1,j1,p;
    while(!coada.empty())
    {
        i1=coada.front().first;
        j1=coada.front().second;
        coada.pop();
        for(p=0;p<=7;p++)
        {
            iurm=i1+dx[p];
            jurm=j1+dy[p];
            if(verif(iurm,jurm)==true && a2[iurm][jurm]==0)
            {
                matj[iurm][jurm]=matj[i1][j1]+1;
                coada.push(make_pair(iurm,jurm));
            }
        }
    }

}
int main()
{
    f>>n>>m; f.get();
    for(i=1;i<=n;i++)
    {
        f.getline(s,101);
        for(j=0;j<m;j++)
        {
            if(s[j]==' ')
            {
                a1[i][j+1]=0;
                a2[i][j+1]=0;
            }
            else if(s[j]=='R' )
            {
                a1[i][j+1]=1;
                a2[i][j+1]=1;
                ir=i;
                jr=j;
            }
            else if(s[j]=='J')
            {
                a1[i][j+1]=1;
                a2[i][j+1]=1;
                ij=i;
                jj=j;
            }
            else if(s[j]=='X')
            {
                a1[i][j+1]=-1;
                a2[i][j+1]=-1;
            }
        }
    }
    leer(ir,jr);
    leej(ij,jj);
    minn=1000000;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(matr[i][j]==matj[i][j] && matr[i][j]<minn)
            {
                minn=matr[i][j];
                pozi=i;
                pozj=j;
            }
        }
    }
    g<<minn<<" "<<pozi<<" "<<pozj;
    f.close();
    g.close();
    return 0;
}