Cod sursa(job #3258112)

Utilizator mihail_11Ionescu Mihail mihail_11 Data 20 noiembrie 2024 23:03:56
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.24 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m;
int rom[105][105],jul[105][105];
char mat[105][105];
void init(int &romi,int &romj,int &juli,int &julj)
{
    int i,j,ch;
    string s;
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;++i)
    {
        getline(fin,s);
        for(j=1;j<=m;++j)
        {
            mat[i][j]=s[j-1];
        }
    }
    for(i=0;i<=n+1;++i)
    {
        for(j=0;j<=m+1;++j)
        {
            rom[i][j]=jul[i][j]=-1;
        }
    }
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=m;++j)
        {
            if(mat[i][j]=='R')
            {
                romi=i;
                romj=j;
                rom[i][j]=jul[i][j]=0;
            }
            else if(mat[i][j]=='J')
            {
                juli=i;
                julj=j;
                rom[i][j]=jul[i][j]=0;
            }
            else if(mat[i][j]=='X')
                ;
            else if(mat[i][j]==' ')
                rom[i][j]=jul[i][j]=0;
        }
    }
}
int ox[]={1,1,1,0,-1,-1,-1,0};
int oy[]={-1,0,1,1,1,0,-1,-1};
void Lee(int t[][105],int si,int sj)
{
    int i,j,newi,newj,k;
    queue<pair<int,int>> qu;
    qu.push({si,sj});
    t[si][sj]=1;
    while(qu.empty()==false)
    {
        i=qu.front().first;
        j=qu.front().second;
        qu.pop();
        for(k=0;k<8;++k)
        {
            newi=i+ox[k];
            newj=j+oy[k];
            if(t[newi][newj]==0)
            {
                qu.push({newi,newj});
                t[newi][newj]=t[i][j]+1;
            }
        }
    }
}
int main()
{
    int romi,romj,juli,julj,minim=2e9,pozi=2e9,pozj=2e9,i,j;
    init(romi,romj,juli,julj);
    Lee(rom,romi,romj);
    Lee(jul,juli,julj);
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=m;++j)
        {
            if(rom[i][j]==jul[i][j] && rom[i][j]>0)
            {
                if(rom[i][j]<minim || (rom[i][j]==minim && i<pozi))
                {
                    //cout<<i<<' '<<j<<'\n';
                    minim=rom[i][j];
                    pozi=i;
                    pozj=j;
                }
            }
        }
    }
    fout<<minim<<' '<<pozi<<' '<<pozj;
    return 0;
}