Cod sursa(job #889311)

Utilizator bia423Bianca Floriana bia423 Data 24 februarie 2013 13:16:30
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.11 kb
#include <fstream>
#include <iostream>

using namespace std;
int n,m,matr[100][100],matj[100][100],xR,xJ,yR,yJ,x[1000],pas,y[1000],first ,last;
const short int dx[]={0,1,0,-1,1,1,-1,-1};
const short int dy[]={-1,0,1,0,1,-1,-1,1};
ifstream g("rj.in");
ofstream f("rj.out");
void citire()
{ int i,j;
 char v[101];
g>>n>>m;
g.getline(v, m+1);
for(i=0;i<n;i++)
    {
    g.getline(v,m+1);
        for(j=0;j<=m;j++)
       {

        if(v[j-1]=='X'){matr[i][j-1]=-1;matj[i][j-1]=-1;}
         else if(v[j-1]==' '){matr[i][j-1]=0;matj[i][j-1]=0;}
         else if(v[j-1]=='R')
        {
            matr[i][j-1]=1;
            xR=i;
            yR=j-1;

        }
        else if(v[j-1]=='J')
        {
            matj[i][j-1]=1;
            xJ=i;
            yJ=j-1;

    }
    }
    }
    }


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

 }
    void leer()
{   short int ii,jj,k;
    while(first<=last)
    {
    for(k=0;k<8;k++)
        {
        ii=x[first]+dx[k];
        jj=y[first]+dy[k];
        if(bun(ii,jj))
        if(matr[ii][jj]==0)
         {          pas=matr[x[first]][y[first]];
                pas++;
                matr[ii][jj]=pas;
                last++;
                x[last]=ii;
                y[last]=jj;
            }

        }
        first++;
  }
}
int leej()
{   short int ii,jj,k;
    while(first<=last)
    {
        for(k=0;k<8;k++)
        {
            ii=x[first]+dx[k];
            jj=y[first]+dy[k];
             if(bun(ii,jj))

               if(matj[ii][jj]==0)
            {   pas=matj[x[first]][y[first]];
                            if(pas==matr[x[first]][y[first]]){f<<matr[x[first]][y[first]]<<" "<<x[first]+1<<" "<<y[first]+1<<endl; return 0;}
                pas++;
                matj[ii][jj]=pas;
                last++;
                x[last]=ii;
                y[last]=jj;
            }

        }
        first++;
    }
}
int main()
{    citire();
    x[0]=xR;
    y[0]=yR;

    leer();
    first=0;last=0;
    x[0]=xJ;
    y[0]=yJ;
    leej();
    f.close();
    return 0;
}