Cod sursa(job #2197659)

Utilizator VictorMac231Victor Maciuc VictorMac231 Data 22 aprilie 2018 17:23:03
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <fstream>
#include <iostream>
#define Nmax 200
#define Aux 1000000
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");

const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};

int bune(int n,int m,int a,int b)
{
    if(a<=0 || a>n || b<=0 || b>m)
        return 0;
    return 1;
}

void lee (int n,int m,int v[][Nmax],int xi,int yi)
{
    int cx[Nmax*Nmax],cy[Nmax*Nmax],ii,jj,pi=0,ps=0,k;
    cx[0]=xi;
    cy[0]=yi;
    v[xi][yi]=1;
    while(pi<=ps)
    {
        for(k=0;k<8;k++)
        {
            ii=cx[pi]+dx[k];
            jj=cy[pi]+dy[k];
            if(bune(n,m,ii,jj))
                if(v[ii][jj]==0)
                {
                v[ii][jj]=v[cx[pi]][cy[pi]]+1;
                ps++;
                cx[ps]=ii;
                cy[ps]=jj;
            }
        }
        pi++;
    }
}

void citire(int vectRom[][Nmax],int vectJuli[][Nmax],int n,int m,int &xrom,int &yrom,int &xjuli,int &yjuli)
{
    char p[265];
    int i,j;
    in.get();
    for(i=1;i<=n;i++)
    {
        in.getline(p,101,'\n');
        for(j=0;j<m;j++)
        {
            if(p[j]==' ')
            {
                vectRom[i][j+1]=0;
                vectJuli[i][j+1]=0;
            }
            else if(p[j]=='R')
            {
                xrom=i;
                yrom=j+1;
            }
            else if(p[j]=='J')
            {
                xjuli=i;
                yjuli=j+1;
            }
            else if(p[j]=='X')
            {
                vectRom[i][j+1]=1;
                vectJuli[i][j+1]=1;
            }
        }
    }
}

int main()
{
    int n,m,xrom,yrom,vectRom[Nmax][Nmax],vectJuli[Nmax][Nmax],xjuli,yjuli,i,j,ii,jj,maxdrum=Aux;
    in>>n>>m;
    citire(vectRom,vectJuli,n,m,xrom,yrom,xjuli,yjuli);
    lee(n,m,vectRom,xrom,yjuli);
    lee(n,m,vectJuli,xjuli,yjuli);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
    {
        if(vectRom[i][j]==vectJuli[i][j] and vectRom[i][j]>1)
            if(vectRom[i][j]<maxdrum)
            {
                maxdrum=vectRom[i][j];
                ii=i;
                jj=j;
            }

    }
    out<< maxdrum << " " << ii << " " << jj;


    return 0;
}