Cod sursa(job #1753391)

Utilizator MoleRatFuia Mihai MoleRat Data 6 septembrie 2016 14:21:04
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
short i,j,n,m,xr,xj,yr,yj;
char A[105][105];
short R[105][105],J[105][105];
short d1[9]= {0,1,-1,1,-1,0,1,-1,0};
short d2[9]= {0,1,-1,-1,1,1,0,0,-1};
typedef struct coada
{
    short l;
    short c;
} COADA;
queue <COADA> Q;
coada x,y;
void lee(short s1,short s2,short P[105][105])
{
    x.l=s1;
    x.c=s2;
    Q.push(x);
    P[s1][s2]=1;
    while (!Q.empty())
    {
        x.l=Q.front().l;
        x.c=Q.front().c;
        Q.pop();
        for (int k=1; k<=8; k++)
        {
            y.l=x.l+d1[k];
            y.c=x.c+d2[k];
            if (P[y.l][y.c]==0 && A[y.l][y.c]!='X')
            {
                P[y.l][y.c]=P[x.l][x.c]+1;
                Q.push(y);
            }
        }
    }
}
int main()
{
    fin>>n>>m;
    fin.get();
    for (i=1; i<=n; i++)
    {
        fin.getline(A[i]+1,105);
        for (j=1; j<=m; j++)
        {
            if (A[i][j]=='R')
            {
                xr=i;
                yr=j;
            }
            else if (A[i][j]=='J')
            {
                xj=i;
                yj=j;
            }
           // if ((short)A[i][j]==0)
             //   A[i][j]=(char)32;
        }
    }
    for (i=0; i<=n+1; i++)
        A[i][0]=A[i][n+1]='X';
    for (i=0; i<=m+1; i++)
        A[0][i]=A[m+1][i]='X';
    lee(xr,yr,R);
    lee(xj,yj,J);
    short mini=32000;
    short k1,k2;
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
            if (R[i][j]==J[i][j] && R[i][j]<mini && R[i][j]!=0)
            {
                mini=R[i][j];
                k1=i;
                k2=j;
            }
    }
    fout<<mini<<' '<<k1<<' '<<k2<<"\n";
    return 0;
}