Cod sursa(job #887726)

Utilizator calin07Calin Claudiu calin07 Data 24 februarie 2013 01:01:55
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.45 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[100][100],matj[100][100];
short int coada[100*100][2],pas,first,last;
bool bun(int i,int j)
{
    if(i<k&&i>=0&&j<l&&j>=0)
        return 1;
    return 0;
}

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(bun(ii,jj))
            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(bun(ii,jj))
            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;
g.getline(v, l+1);
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]=-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]=0;
            xR=i;
            yR=j-1;

        }
        else if(v[j-1]=='J')
        {
            matj[i][j-1]=0;
            xJ=i;
            yJ=j-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");
xR=0,yR=7991;
for(i=0;i<k&&xR==0;i++)
   for(j=0;j<l&&xR==0;j++)
        if(matr[i][j]<yR&&matr[i][j]==matj[i][j]&&matj[i][j]!=-1&&matr[i][j]!=-1&&matj[i][j]!=0&&matr[i][j]!=0)
        {xJ=i;yJ=j;yR=matr[i][j];
        }

        o<<yR+1<<" "<<xJ+1<<" "<<yJ+1;
o.close();
g.close();
return 0;
}