Cod sursa(job #2059714)

Utilizator corina_dimitriuDimitriu Corina corina_dimitriu Data 7 noiembrie 2017 15:34:37
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.88 kb
#include <fstream>
#define DMAX 105

using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int Ro[DMAX][DMAX];
int Ju[DMAX][DMAX];
int dl[]= {-1,-1,0,1,1,1,0,-1};
int dc[]= {0,1,1,1,0,-1,-1,-1};
struct pozitie
{
    int x, y;
};
pozitie C[DMAX*DMAX];
void citire(int &lin1, int &lin2, int &col1, int &col2);
void bordare(int L[DMAX][DMAX]);
void lee(int lin, int col, int L[DMAX][DMAX]);
void cautare(int &poz1, int&poz2);
int mini=10300,i,j,lin1,col1,lin2,col2,n,m;
int main()
{
    citire(lin1,lin2,col1,col2);
    bordare(Ro);
    bordare(Ju);
    lee(lin1,col1,Ro);
    lee(lin2,col2,Ju);
    cautare(i,j);
    fout<<mini<<' '<<i<<' '<<j<<'\n';
    fin.close();
    fout.close();
    return 0;
}
void citire(int &lin1, int &lin2, int &col1, int &col2)
{
    char x;
    int i,j;
    fin>>n>>m;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            fin.get(x);
            if(x=='X')
            {
                Ro[i][j]=-1;
                Ju[i][j]=-1;
            }
            else
                if(x==' ' || x=='R' || x=='J')
                {  Ro[i][j]=0;
                {  Ju[i][j]=0;
                    if(x=='R')
                    {
                        Ro[i][j]=1;
                        Ju[i][j]=-1;
                        lin1=i;
                        col1=j;
                    }
                    else
                        if(x=='J')
                        {
                            Ju[i][j]=1;
                            Ro[i][j]=-1;
                            lin2=i;
                            col2=j;
                        }
                }
                }
        }
        while(x!='\n')
            fin.get(x);
    }




}
void bordare(int L[DMAX][DMAX])
{
    int i;
    for(i=0; i<=m+1; i++)
        L[0][i]=L[n+1][i]=-1;
    for(i=0; i<=n+1; i++)
        L[i][0]=L[i][m+1]=-1;

}
void lee(int lin, int col, int L[DMAX][DMAX])
{
    int i,k,prim,ultim,nx,ny,vx,vy;
    for(i=1; i<DMAX*DMAX; i++)
    {
        C[i].x=0;
        C[i].y=0;
    }
    C[0].x=lin;
    C[0].y=col;
    prim=ultim=0;
    while(prim<=ultim)
    {
        nx=C[prim].x;
        ny=C[prim].y;
        prim++;
        for(k=0; k<8; k++)
        {
            vx=nx+dl[k];
            vy=ny+dc[k];
            if(L[vx][vy]==0)
            {
                L[vx][vy]=L[nx][ny]+1;
                C[++ultim].x=vx;
                C[ultim].y=vy;
            }
        }
    }

}
void cautare(int &poz1, int&poz2)
{
    int i,j;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(Ro[i][j]==Ju[i][j] && Ro[i][j]!=-1 && Ro[i][j]!=0)
            {
                if(Ro[i][j]<mini)
                {
                    poz1=i;
                    poz2=j;
                    mini=Ro[i][j];
                }
            }

}