Cod sursa(job #889529)

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

using namespace std;
int n,m,matr[100][100],matj[100][100],xR,xJ,yR,yJ,x[100*100],pas,y[100*100],first ,last,z[100*100],zz[100*100],q=0;
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++;
  }
}
void 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]];

                pas++;
                matj[ii][jj]=pas;
                if(pas==matr[ii][jj]){ z[q]=ii; zz[q]=jj; q++;}
                last++;
                x[last]=ii;
                y[last]=jj;
            }

        }
        first++;
    }
}
int main()
{
    int i,mnx,mny,p;
    citire();
    x[0]=xR;
    y[0]=yR;
    leer();
    for(i=0;i<100;i++)
        x[i]=0;
    for(i=0;i<100;i++)
        y[i]=0;
    first=0;last=0;
    x[0]=xJ;
    y[0]=yJ;
    leej();
      if(q==1)f<<matr[z[q-1]][zz[q-1]]<<" "<<z[q-1]+1<<" "<<zz[q-1]+1<<endl;
    else {
           mnx=z[0];mny=z[0];
            for(i=1;i<q;i++)
                if(mnx>z[i]){ mnx=z[i];mny=zz[i]; p=i; }
                       for(i=0;i<q;i++)
            if(mnx==z[i]){ if(mny>zz[i]) mny=zz[i]; }
            f<<matr[mnx][mny]<<" "<<mnx+1<<" "<<mny+1<<" ";

    }
    f.close();
    return 0;
}