Cod sursa(job #2392641)

Utilizator Giulian617Buzatu Giulian Giulian617 Data 30 martie 2019 11:27:01
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.93 kb
#include <bits/stdc++.h>
#define NMax 1005
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int dx[] = {0, -1, 0, 1,-1,1,1,-1};
int dy[] = {-1, 0, 1, 0,-1,-1,1,1};
void lee(int a[NMax][NMax],int x, int y)
{
    deque < int > qx, qy;
    qx.push_back(x);
    qy.push_back(y);
    a[x][y] = 1;
    while(qx.empty() == false)
    {
        x=qx.front();
        y=qy.front();
        qx.pop_front();
        qy.pop_front();
        for(int i=0; i<8; i++)
        {
            int nx=x+dx[i];
            int ny=y+dy[i];
            if(a[nx][ny]==0)
            {
                a[nx][ny]=a[x][y]+1;
                qx.push_back(nx);
                qy.push_back(ny);
            }
        }
    }
}
int x[NMax][NMax],a[NMax][NMax],b[NMax][NMax];
int main()
{
    int n,m,x1,x2,y1,y2,i1,j1,mn=2000000000;
    string s;
    f>>n>>m;
    f.get();
    for(int i=1; i<=n; i++)
    {
        getline(f,s);
        for(int j=0; j<m; j++)
        {
            if(s[j]=='X')
                x[i][j+1]=a[i][j+1]=b[i][j+1]=-1;
            else if(s[j]=='R')
            {
                a[i][j+1]=1;
                x1=i;
                y1=j+1;
            }
            else if(s[j]=='J')
            {
                b[i][j+1]=1;
                x2=i;
                y2=j+1;
            }
        }
    }
    for(int i=0; i<=m+1; i++)
        x[0][i]=a[0][i]=b[0][i]=-1;
    for(int i=0; i<=m+1; i++)
        x[n+1][i]=a[n+1][i]=b[n+1][i]=-1;
    for(int i=0; i<=n+1; i++)
        x[i][0]=a[i][0]=b[i][0]=-1;
    for(int i=0; i<=n+1; i++)
        x[i][m+1]=a[i][m+1]=b[i][m+1]=-1;

    lee(a,x1,y1);
    lee(b,x2,y2);

    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            if(a[i][j]==b[i][j] && a[i][j]<mn && a[i][j]>0)
            {
                mn=a[i][j];
                i1=i;
                j1=j;
            }
    g<<mn<<" "<<i1<<" "<<j1;
    return 0;
}