Cod sursa(job #1992416)

Utilizator vladcoroian2001Vlad Coroian vladcoroian2001 Data 20 iunie 2017 14:11:13
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <fstream>
#include <deque>
using namespace std;
ifstream fi("rj.in");
ofstream fo("rj.out");
int A[102][102],R[102][102],J[102][102],i,j,n,m,xr,yr,xj,yj,xl,yl,tmin=10001;
int dl[]={-1,-1,0,1,1,1,0,-1};
int dc[]={0,1,1,1,0,-1,-1,-1};
char c;
pair <int,int> q;
deque <pair <int,int> > D;
void lee(int x,int y, int X[102][102])
{
    int k;
    X[x][y]=1;
    D.push_back(make_pair(x,y));
    while(!D.empty())
    {
        q=D.front();
        D.pop_front();
        for(k=0;k<=7;k++)
        {
            if(A[q.first+dl[k]][q.second+dc[k]]==0 && X[q.first+dl[k]][q.second+dc[k]]==0 && q.first+dl[k]>=1 && q.first+dl[k]<=n && q.second+dc[k]>=1 && q.second+dc[k]<=n)
            {
                X[q.first+dl[k]][q.second+dc[k]]=X[q.first][q.second]+1;
                D.push_back(make_pair(q.first+dl[k],q.second+dc[k]));
            }
        }
    }
}
int main()
{
    fi>>n>>m;
    for(i=1;i<=n;i++)
    {
        A[i][0]=-1;
        A[i][m+1]=-1;
    }
    for(j=1;j<=m;j++)
    {
        A[0][j]=-1;
        A[n+1][j]=-1;
    }
    for(i=1;i<=n;i++)
    {
        c=fi.get();
        for(j=1;j<=m;j++)
        {
            c=fi.get();
            if(c=='X')
                A[i][j]=-1;
            if(c==' ')
                A[i][j]=0;
            if(c=='R')
            {
                A[i][j]=0;
                xr=i;
                yr=j;
            }
            if(c=='J')
            {
                A[i][j]=0;
                xj=i;
                yj=j;
            }
        }
    }
    R[xr][yr]=1;
    lee(xr,yr,R);
    J[xj][yj]=1;
    lee(xj,yj,J);
    for(j=1;j<=m;j++)
        for(i=1;i<=n;i++)
        {
            if(R[i][j]==J[i][j] && R[i][j]!=0 && tmin>R[i][j])
            {
                xl=i;
                yl=j;
                tmin=R[i][j];
            }
        }
    fo<<tmin<<" "<<xl<<" "<<yl;
    fi.close();
    fo.close();
    return 0;
}