Cod sursa(job #887678)

Utilizator calin07Calin Claudiu calin07 Data 24 februarie 2013 00:01:54
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.69 kb
#include <fstream>
using namespace std;
const short int dx[]={0,1,0,-1,1,1,-1,-1};
const short int dy[]={-1,0,1,0,1,-1,-1,1};
short int xR,yR,xJ,yJ;
short int i,j,l,k;
short int matr[102][102],matj[102][102];
short int coada[102*102][2],pas,first,last;
void leeRcoada()
{
    short int ii,jj,kappa;
    while(first<=last)
    {
        for(kappa=0;kappa<8;kappa++)
        {
            ii=coada[first][0]+dx[kappa];
            jj=coada[first][1]+dy[kappa];
            if(matr[ii][jj]==0)
            {
                pas=matr[coada[first][0]][coada[first][1]];
                pas++;
                matr[ii][jj]=pas;
                last++;
                coada[last][0]=ii;
                coada[last][1]=jj;
            }

        }
        first++;
    }
}
void leeJcoada()
{
    short int ii,jj,kappa;
    while(first<=last)
    {
        for(kappa=0;kappa<8;kappa++)
        {
            ii=coada[first][0]+dx[kappa];
            jj=coada[first][1]+dy[kappa];
            if(matj[ii][jj]==0)
            {
                pas=matj[coada[first][0]][coada[first][1]];
                pas++;
                matj[ii][jj]=pas;
                last++;
                coada[last][0]=ii;
                coada[last][1]=jj;
            }

        }
        first++;
    }
}
int main()
{
 ifstream g("rj.in");

char v[101];
g>>k>>l;
for(i=0;i<=k;i++)
    {
        g.getline(v,l+1);
        for(j=1;j<=l;j++)
       {

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

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

        }

        }
    }
//bordizification
for(i=0;i<=(l<k?k:l);i++)
{
        matj[i][0]=-1;
        matj[i][k+1]=-1;
        matj[0][i]=-1;
        matj[l+1][i]=-1;
        matr[i][0]=-1;
        matr[i][k+1]=-1;
        matr[0][i]=-1;
        matr[l+1][i]=-1;
}
coada[0][0]=xR;
coada[0][1]=yR;
leeRcoada();
first=0;last=0;
coada[0][0]=xJ;
coada[0][1]=yJ;
leeJcoada();
ofstream o("rj.out");
/*for(i=1;i<=k;i++)
    {
        o<<endl;
        for(j=1;j<=l;j++)
    o<<matr[i][j];}
    o<<endl<<endl<<endl;
    for(i=1;i<=k;i++)
    {
        o<<endl;
        for(j=1;j<=l;j++)
    o<<matj[i][j];}
    o<<endl<<endl;
 */   xR=0;
for(i=1;i<=k&&xR==0;i++)
   for(j=1;j<=l&&xR==0;j++)
        if(matr[i][j]==matj[i][j]&&matj[i][j]!=-1&&matr[i][j]!=-1&&matj[i][j]!=0&&matr[i][j]!=0)
        {xR=1;o<<matr[i][j]+1<<" "<<i<<" "<<j;}
o.close();
g.close();
return 0;
}