Cod sursa(job #2064539)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 12 noiembrie 2017 14:49:22
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.4 kb
#include <fstream>
#include <cctype>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct punct
{
    int l,c;
};
punct q[105*105];
int a[105][105];
int aux[105][105];
int dx[10]= {-1,-1,0,1,1,1,0,-1};
int dy[10]= {0,1,1,1,0,-1,-1,-1};
int linie,coloana;
char caracter;
int xr,yr,xj,yj;
int lmin,cmin;
int x,y,xx,yy,t;
int p,u;
int n,m,i,j;
int Min=1005*1005;
int main()
{
    f>>n>>m;
    f.get(caracter);
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            f.get(caracter);
            if(caracter=='R')
            {
                xr=i;
                yr=j;
                a[i][j]=1;
            }
            else if(caracter=='J')
            {
                xj=i;
                yj=j;
                a[i][j]=1;
            }
            if(caracter=='X')
                a[i][j]=-1;
            else if(caracter==' ')
                a[i][j]=1;
        }
        f.get(caracter);
    }

    for(i=0; i<=m+1; i++)
        a[0][i]=a[n+1][i]=-1;
    for(i=1; i<=n; i++)
        a[i][0]=a[i][m+1]=-1;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(a[i][j]==1)
            {
                for(linie=0; linie<=n+1; linie++)
                    for(coloana=0; coloana<=m+1; coloana++)
                        aux[linie][coloana]=a[linie][coloana];
                p=u=1;
                q[p].l=i;
                q[p].c=j;
                while(p<=u)
                {
                    x=q[p].l;
                    y=q[p].c;
                    for(t=0; t<=7; t++)
                    {
                        xx=x+dx[t];
                        yy=y+dy[t];
                        if(aux[xx][yy]==1)
                        {
                            u++;
                            q[u].l=xx;
                            q[u].c=yy;
                            aux[xx][yy]=aux[x][y]+1;
                        }
                    }
                    p++;
                }
                //g<<aux[xr][yr]<<' '<<aux[xj][yj]<<' '<<i<<' '<<j<<' '<<'\n';
                if(aux[xr][yr]==aux[xj][yj]&&aux[xr][yr]>1)
                    if(aux[xr][yr]<Min)
                    {
                        Min=aux[xr][yr];
                        lmin=i;
                        cmin=j;
                    }
            }
    g<<Min<<' '<<lmin<<' '<<cmin<<'\n';
    return 0;
}