Cod sursa(job #1257961)

Utilizator raduzxstefanescu radu raduzx Data 8 noiembrie 2014 12:43:43
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.6 kb
#include <fstream>
#include <iostream>
using namespace std;
const int dx[]={7,-1,-1,0,1,1,1,0,-1};
const int dy[]={7,0,1,1,1,0,-1,-1,-1};
int mr[102][102],mj[102][102],n,m,xj,yj,xr,yr;
ifstream f("rj.in");
ofstream g("rj.out");
void citire()
{
    int i,j;
    char s[101];

    f>>n>>m;
    f.getline(s,3,'\n');
    for(i=1;i<=n;i++)
    {
        f.getline(s,100,'\n');
        for(j=0;j<m;j++)
        {
            if(s[j]=='R')
            {
                xr=i;
                yr=j+1;
            }
            else
                if(s[j]=='J')
                {
                    xj=i;
                    yj=j+1;
                }
                else
                    if(s[j]=='X')
                    {
                        mr[i][j+1]=-1;
                        mj[i][j+1]=-1;

                }
        }
    }
    //cout<<mr[n][m];
}
void bordare()
{
    int i;
    for(i=0;i<=n+1;i++)
    {
        mr[i][m+1]=-1;
        mj[i][m+1]=-1;
        mr[0][i]=-1;
        mj[0][i]=-1;
    }
    for(i=0;i<=m+1;i++)
    {
        mr[i][n+1]=-1;
        mr[0][i]=-1;
        mj[i][n+1]=-1;
        mj[0][i]=-1;
    }
}
void leer()
{
    int qx[10000],qy[10000],in,sf,nx,ny,xx,yy,i;
    in=sf=1;
    qx[1]=xr;
    qy[1]=yr;
    mr[xr][yr]=1;
    while(in<=sf)
    {
        nx=qx[in];
        ny=qy[in];
        for(i=1;i<=8;i++)
        {
            xx=nx+dx[i];
            yy=ny+dy[i];
            if(mr[xx][yy]==0)
            {
                sf++;
                qx[sf]=xx;
                qy[sf]=yy;
                mr[xx][yy]=mr[nx][ny]+1;
            }
        }
        in++;
    }
}
void leej()
{
    int qx[10000],qy[10000],inc,sf,nx,ny,xx,yy,i;
    inc=sf=1;
    qx[1]=xj;
    qy[1]=yj;
    mj[xj][yj]=1;
    while(inc<=sf)
    {
        nx=qx[inc];
        ny=qy[inc];
        for(i=1;i<=8;i++)
        {
            xx=nx+dx[i];
            yy=ny+dy[i];
            if(mj[xx][yy]==0)
            {
                sf++;
                qx[sf]=xx;
                qy[sf]=yy;
                mj[xx][yy]=mj[nx][ny]+1;
            }
        }
        inc++;
    }
}
void minim()
{
    int i,j,min,xmin,ymin;
    min=n*m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {
            if(mr[i][j]>0&&mr[i][j]==mj[i][j]&&mr[i][j]<min)
            {
                min=mr[i][j];
                xmin=i;
                ymin=j;
            }
        }
    g<<xmin<<" "<<ymin<<" "<<min;
}
int main()
{
    citire();
    bordare();
    leer();
    leej();
    minim();
    //int ;
    return 0;
}