Cod sursa(job #890995)

Utilizator razvanb87Razvan Buhaianu razvanb87 Data 25 februarie 2013 13:06:07
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.16 kb
#include <fstream>
#include <iostream>


using namespace std;
ofstream fout("rj.out");

int n,m,matR[100][100],matJ[100][100],xr,yr,xj,yj,x[100000],y[100000];

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

int first, last,pas;

void citire()
{
    int i,j;
    char sir[101];
    ifstream fin("rj.in");
    fin>>n>>m;
    fin.get();
    for(i=0;i<n;i++)
    {
        fin.getline(sir,100,'\n');
        for(j=0;j<m;j++)
        {
            if(sir[j]=='R')
            {
                matR[i][j]=1;
                xr=i;
                yr=j;
            }
            if(sir[j]=='J')
            {
                matJ[i][j]=1;
                xj=i;
                yj=j;
            }
            if(sir[j]=='X')
            {
                matR[i][j]=1;
                matJ[i][j]=1;
            }
        }
    }
    fin.close();
}

int bune(int ii, int jj)
{
    return((ii<n)&&(ii>=0)&&(jj<m)&&(jj>=0));
}

void leec(int mat[][100])
{
    int ii,jj,k;
    while(first<=last)
    {
        for(k=0;k<8;k++)
        {
            ii=x[first]+dx[k];
            jj=y[first]+dy[k];

            if(bune(ii,jj)==1)
            {   pas=mat[x[first]][y[first]];
                if((mat[ii][jj]==0)||(mat[ii][jj]>pas+1))
                {
                    pas=pas+1;
                    mat[ii][jj]=pas;
                    last=last+1;
                    x[last]=ii;
                    y[last]=jj;
                }
            }
        }
        first=first+1;
    }
}

int main()
{
    citire();
    int minim,xf,yf,i,j;
    first=0;
    last=0;
    x[0]=xr;
    y[0]=yr;
    leec(matR);

    first=0;
    last=0;
    x[0]=xj;
    y[0]=yj;
    leec(matJ);




    minim=10000;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            if(matR[i][j]==matJ[i][j])
                if(matR[i][j]>1)
                    if(matR[i][j]<minim)
                    {
                        minim=matR[i][j];
                        xf=i;
                        yf=j;
                    }

    fout<<minim<<" "<<xf+1<<" "<<yf+1;
    fout.close();
    return 0;
}