Cod sursa(job #1630208)

Utilizator unnouinceputMaria Petrescu unnouinceput Data 4 martie 2016 23:23:54
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <fstream>

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

void citire (int &n, int &m, int mat[][100], int &xr, int &yr, int &xj, int &yj)
{
    int i,j;
    char sir[101];

    ifstream in("rj.in");
    in>>n>>m;
    in.get();
    for(i=0;i<n;i++)
    {
        in.getline(sir,101,'\n');
        for(j=0;j<m;j++)
        {
            mat[i][j]=0;
            if(sir[j]=='X') mat[i][j]=1;
            if(sir[j]=='R') {xr=i; yr=j;}
            if(sir[j]=='J') {xj=i; yj=j;}
        }
    }
    in.close();
}
int bune(int ii, int jj, int n, int m)
{
    return (ii>=0 and ii<n and jj>=0 and jj<m);
}
void rj(int n, int m, int mat[][100], int x, int y)
{
    int k, cx[10000], cy[10000], ii, jj, pi, ps, pas;
    int dx[]={-1,-1,0,1,1,1,0,-1};
    int dy[]={0,1,1,1,0,-1,-1,-1};
    mat[x][y]=1;
    cx[0]=x;
    cy[0]=y;
    pi=0;
    ps=0;
    while(pi<=ps)
    {
        x=cx[pi];
        y=cy[pi];
        for(k=0;k<8;k++)
        {
            ii=x+dx[k];
            jj=y+dy[k];
            if(bune(ii,jj,n,m))
            {
                pas=mat[x][y]+1;
                if(mat[ii][jj]==0 or mat[ii][jj]>pas)
                {
                    mat[ii][jj]=pas;
                    ps++;
                    cx[ps]=ii;
                    cy[ps]=jj;
                }
            }
        }
        pi++;
    }
}
int main()
{
    int n,m,mat[100][100],xr,yr,xj,yj,i,j,x,y,mx;

    char sir[101];

    citire(n,m,mat,xr,yr,xj,yj);

    rj(n,m,mat,xr,yr);
    rj(n,m,mat,xj,yj);

    mx=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            //out<<mat[i][j]<<" ";
            if(mat[i][j]>mx)
            {
                mx=mat[i][j];
                x=i;
                y=j;
            }
        }
        //out<<endl;
    }
    out<<mx<<" "<<x+1<<" "<<y+1;
    out.close();
    return 0;
}