Cod sursa(job #1703385)

Utilizator AndreidgDragomir Andrei Valentin Andreidg Data 16 mai 2016 21:07:24
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.69 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct poz
{
    short x,y;
};
short i,j,n,m,x1=0,x2=0,y1=0,y2=0;
int mat1[105][105];
int mat2[105][105];
char x[106];
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
poz t,ts,coada[10500];
void lee1()
{
    int u,p;
    p=1;
    u=1;
    coada[1].x=x2;
    coada[1].y=y2;
    while(p<=u)
    {
        t.x=coada[p].x;
        t.y=coada[p].y;
        for(i=0;i<8;i++)
        {
            ts.x=t.x+dx[i];
            ts.y=t.y+dy[i];
            if(mat1[ts.x][ts.y]==0)
            {
                u++;
                coada[u].x=ts.x;
                coada[u].y=ts.y;
                mat1[ts.x][ts.y]=mat1[t.x][t.y]+1;
            }
        }
        p++;
    }
}
void lee2()
{
    int u1,p1;
    p1=1;
    u1=1;
    coada[1].x=x1;
    coada[1].y=y1;
    while(p1<=u1)
    {
        t.x=coada[p1].x;
        t.y=coada[p1].y;
        for(i=0;i<8;i++)
        {
            ts.x=t.x+dx[i];
            ts.y=t.y+dy[i];
            if(mat2[ts.x][ts.y]==0)
            {
                u1++;
                coada[u1].x=ts.x;
                coada[u1].y=ts.y;
                mat2[ts.x][ts.y]=mat2[t.x][t.y]-1;
            }
        }
        p1++;
    }
}
int main()
{
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        f.getline(x,105);
        for(j=0;j<m;j++)
        {
            if(x[j]=='X')
            {
                mat1[i][j+1]=1;
                mat2[i][j+1]=1;
            }
            else
            {
                if(x[j]=='R')
                {
                    x1=i;
                    y1=j+1;
                    mat1[i][j+1]=-1;
                }
                else
                {
                    if(x[j]=='J')
                    {
                        x2=i;
                        y2=j+1;
                        mat2[i][j+1]=1;
                    }
                }
            }
        }
    }
    for(i=0;i<=n+1;i++)
    {
        mat1[i][0]=1;
        mat1[i][m+1]=1;
        mat2[i][0]=1;
        mat2[i][m+1]=1;
    }
    for(j=0;j<=m+1;j++)
    {
        mat1[0][j]=1;
        mat1[n+1][j]=1;
        mat2[0][j]=1;
        mat2[n+1][j]=1;
    }
    lee1();
    lee2();
    int Min=99999999;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(mat1[i][j]>0&&mat2[i][j]<0&&mat1[i][j]==-1*mat2[i][j]&&mat1[i][j]<Min)
            {
                Min=mat1[i][j];
                x1=i;
                y1=j;
            }
        }
    }
    g<<Min+1<<" "<<x1<<" "<<y1;
    f.close();
    g.close();
    return 0;
}