Cod sursa(job #2656003)

Utilizator Johnny07Savu Ioan-Daniel Johnny07 Data 6 octombrie 2020 14:41:54
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.54 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int mat[110][110],n,m,linr,linj,colr,colj,mat2[110][110],z,mi,linn,coll;
char t[500],ch[2];
int dl[]={-1, -1, 0, 1, 1, 1, 0, -1}, dc[]={0, 1, 1, 1, 0, -1, -1, -1};

struct poz
{
    int l,c;
};
poz c[11000];

void Lee(int lin, int col)
{
    int i,ultim,prim,ll,cc;
    mat[lin][col]=1;
prim=1;
ultim=1;
c[1].l=lin;
c[1].c=col;
while (prim<=ultim)
{
    lin=c[prim].l;
    col=c[prim].c;
    prim++;
    for (i=0;i<=7;i++)
    {
        ll=lin+dl[i];
        cc=col+dc[i];
        if (mat[ll][cc]==0)
        {
            ultim++;
            c[ultim].l=ll;
            c[ultim].c=cc;
            mat[ll][cc]=mat[lin][col]+1;
        }
    }

}


}



void Lee2 (int lin, int col)
{
        int i,ultim,prim,ll,cc;
    mat2[lin][col]=1;
prim=1;
ultim=1;
c[1].l=lin;
c[1].c=col;
while (prim<=ultim)
{
    lin=c[prim].l;
    col=c[prim].c;
    prim++;
    for (i=0;i<=7;i++)
    {
        ll=lin+dl[i];
        cc=col+dc[i];
        if (mat2[ll][cc]==0)
        {
            ultim++;
            c[ultim].l=ll;
            c[ultim].c=cc;
            mat2[ll][cc]=mat2[lin][col]+1;
        }
    }

}

}


int main()
{
    int i,j;
f>>n>>m;
m--;
f.getline (ch,2);
for (i=1;i<=n;i++)
{
    f.getline (t,200);
    for (j=0;j<=m;j++)
    {
        if (t[j]=='X') {mat[i][j+1]=-1;mat2[i][j+1]=-1;}
        if (t[j]==' ') {mat[i][j+1]=0;mat2[i][j+1]=0;}
        if (t[j]=='R') {linr=i;colr=j+1;mat[i][j+1]=0;mat2[i][j+1]=0;}
        if (t[j]=='J') {linj=i;colj=j+1;mat[i][j+1]=0;mat2[i][j+1]=0;}
    }
}
m++;
for (i=0;i<=n+1;i++)
{
        mat2[i][0]=-1;
    mat2[i][m+1]=-1;
    mat[i][0]=-1;
    mat[i][m+1]=-1;
}
for (i=0;i<=m+1;i++)
{
       mat2[0][i]=-1;
    mat2[n+1][i]=-1;
    mat[0][i]=-1;
    mat[n+1][i]=-1;
}
z=0;
//cout<<linr<<" "<<colr;
Lee (linr, colr);
/*for (i=1;i<=n;i++){
    for (j=1;j<=m;j++) {
    if (mat[i][j]==-1) cout<<-mat[i][j]<<" ";
    else cout<<mat[i][j]<<" ";
    }
cout<<"\n";

}
cout<<"\n\n";
*/
Lee2 (linj,colj);
/*for (i=1;i<=n;i++){
    for (j=1;j<=m;j++) {
    if (mat2[i][j]==-1) cout<<-mat2[i][j]<<" ";
    else cout<<mat2[i][j]<<" ";
    }
cout<<"\n";
}
*/
mi=1000;
for (i=1;i<=n;i++){
    for (j=1;j<=m;j++)
if (mat[i][j]==mat2[i][j] && mat[i][j]!=-1 && mat[i][j]!=0) {if (mat[i][j]<mi) {mi=mat[i][j];linn=i;coll=j;} }

}
//cout<<mat[10][10];
//cout<<mat2[10][10];
g<<mi<<" "<<linn<<" "<<coll;

        return 0;
}