Cod sursa(job #1003290)

Utilizator corina.ioanaSerbanescu Corina corina.ioana Data 30 septembrie 2013 11:32:30
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <fstream>
#include <cstring>
#define INF 100001
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int dx[8]= {-1,-1,-1,0,0,1,1,1};
const int dy[8]= {1,0,-1,1,-1,1,0,-1};
int r[101][101],J[101][101],n,m;
bool verif (int x,int y,int a[101][101])
{
    if (x<=0||y<=0||x>n||y>m) return true;
    else return false;
}
struct num
{
    int l;
    int c;
};
num Q[10000];
void lee(int a[101][101],int xi,int yi)
{
    int xx,yy,x,y,p,u,i,j;
    bool ok;
    p=u=1;
    Q[u].l=xi;
    Q[u].c=yi;
    ok=false;
    while (p<=u&&!ok)
    {
        x=Q[p].l;
        y=Q[p].c;
        for (i=0; i<=7; i++)
        {
            xx=x+dx[i];
            yy=y+dy[i];
            if (!verif(xx,yy,a)&&a[xx][yy]==INF)
            {
                a[xx][yy]=a[x][y]+1;
                u++;
                Q[u].l=xx;
                Q[u].c=yy;
            }
        }
        p++;
    }


}
int main ()
{
    f>>n>>m;
    f.get();
    int i,j;
    int rx,ry,jx,jy;
    char c[101];
    for (i=1;i<=n;i++)
    {
        f.get(c,101);
        for (j=0;j<m;j++)
        {
            if(c[j]=='X')
            {
                r[i][j+1]=-1;
                J[i][j+1]=-1;
            }
            else if (c[j]=='R')
            {
                r[i][j+1]=0;
                J[i][j+1]=INF;
                rx=i;
                ry=j+1;

            }
            else if (c[j]=='J')
            {
                J[i][j+1]=0;
                 r[i][j+1]=INF;
                jx=i;
                jy=j+1;
            }
            else r[i][j+1]=J[i][j+1]=INF;
        }
        f.get();
    }
    lee(r,rx,ry);
    lee(J,jx,jy);

    int M,Mx,My;
    M=INF;
    for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
    {
        if (r[i][j]==J[i][j]&&r[i][j]!=-1&&r[j][i]!=INF&&r[i][j]<M)
        {
            M=r[i][j];
            Mx=i;
            My=j;
        }
    }
    g<<M+1<<' '<<Mx<<' '<<My;


	return 0;
}