Cod sursa(job #2371650)

Utilizator denisaaabBucur Denisa Andreea denisaaab Data 6 martie 2019 18:50:53
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.09 kb
#include <iostream>
#include <queue>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
queue < pair<int,int> >Q;
int a[101][101],b[101][101],N,M,ir,jr,ij,jj;
int di[]= {-1, -1, 0, 1, 1, 1, 0, -1};
int dj[]= {0, 1, 1, 1, 0, -1, -1, -1};
void bordare(int a[101][101])
{
    for(int i=0; i<=N+1; i++)
    {
        a[i][0]=-1;
        a[i][M+1]=-1;
    }
    for(int j=0; j<=M+1; j++)
    {
        a[0][j]=-1;
        a[N+1][j]=-1;
    }
}
void lee(int x,int y,int a[101][101])
{
    a[x][y]=1;
    Q.push(make_pair(x,y));
    while(!Q.empty())
    {
        pair <int,int>q=Q.front();
        Q.pop();
        for(int k=0; k<8; k++)
        {
            int vi=q.first+di[k];
            int vj=q.second+dj[k];
            if(a[vi][vj]==0)
            {
                a[vi][vj]=1+a[q.first][q.second];
                Q.push(make_pair(vi,vj));
            }
        }
    }
}
void citire()
{
    char s[256];
    f>>N>>M;
    f.get();
    for(int i=1; i<=N; i++)
    {
        f.getline(s+1,256);
        for(int j=1; j<=M; j++)
        {
            if(s[j]==' ')
            {
                a[i][j]=0;
                b[i][j]=0;
            }
            else if(s[j]=='X')
            {
                a[i][j]=-1;
                b[i][j]=-1;
            }
            else if(s[j]=='J')
            {
                ij=i;
                jj=j;
                a[i][j]=0;
                b[i][j]=0;
            }
            else if(s[j]=='R')
            {
                ir=i;
                jr=j;
                a[i][j]=0;
                b[i][j]=0;
            }
        }
    }
}
int main()
{   int tmin=999999,fini,finj;
    citire();
    bordare(a);
    bordare(b);
    lee(ir,jr,a);
    lee(ij,jj,b);
    for(int i=1;i<N;i++)
        for(int j=1;j<M;j++)
    {
        if(a[i][j]==b[i][j] && a[i][j]<tmin && a[i][j]>0)
        {
            tmin=a[i][j];
            fini=i;
            finj=j;
        }
    }
        g<<tmin<<" "<<fini<<" "<<finj;



    return 0;
}