Cod sursa(job #889622)

Utilizator bia423Bianca Floriana bia423 Data 24 februarie 2013 17:00:14
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.63 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],np[100*100],q=0,i,j;
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; np[q]=pas;q++;}

                last++;
                x[last]=ii;
                y[last]=jj;
            }

        }
        first++;
    }

}
int main()
{
    int i,mnx,mny,p,mp;
    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();mp=np[0];


      if(q==1)f<<matr[z[q-1]][zz[q-1]]<<" "<<z[q-1]+1<<" "<<zz[q-1]+1<<endl;
    else {for(i=0;i<q;i++)
                    if(mp>=np[i]){mp=np[i];mnx=z[i];mny=z[i];}

            for(i=0;i<q;i++)
                if((mnx>z[i])&&(mp==np[i])){ mnx=z[i];mny=zz[i]; p=i; }
                       for(i=0;i<q;i++)
            if((mnx==z[i])&&(mp==np[i])){ if(mny>zz[i]) mny=zz[i]; }
                   f<<matr[mnx][mny]<<" "<<mnx+1<<" "<<mny+1<<" ";

    }
    f.close();
    return 0;
}