Cod sursa(job #1378036)

Utilizator bt.panteaPantea Beniamin bt.pantea Data 6 martie 2015 10:13:11
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <iostream>
#include <fstream>
#define MAX 2000000000
using namespace std;
ifstream f ("rj.in");
ofstream g ("rj.out");
int dl[8]={-1,-1,0,1,1,1,0,-1},dc[8]={0,1,1,1,0,-1,-1,-1},i,j,x1,y1,xr,yr,xj,yj,a[105][105],b[105][105],n,m,inc,sf,Min;
char s[150];
struct nume
{
    int c,l;
}C[10000],x,y;
int main()
{
    f>>n>>m;
    f.getline(s,149);
    Min=MAX;
    for (i=1;i<=n;i++)
    {
        f.getline(s,105);
        for (j=0;j<m;j++)
        {
            if (s[j]=='R')
            {
                xr=i;
                yr=j+1;
                a[i][j+1]=-2;
                b[i][j+1]=-2;
            }
            else if (s[j]=='J')
            {
                xj=i;
                yj=j+1;
                a[i][j+1]=-2;
                b[i][j+1]=-2;
            }
            else if (s[j]=='X') a[i][j+1]=-1,b[i][j+1]=-1;
            else a[i][j+1]=-2,b[i][j+1]=-2;
        }
    }
    for (i=0;i<=n;i++)
        a[i][0]=a[i][n+1]=b[i][0]=b[n+1][0]=-1;
    for (i=0;i<=m;i++)
        a[0][i]=a[0][m+1]=b[0][i]=b[0][m+1]=-1;
    //r-a j-b
    a[xr][yr]=1;
    C[inc].l=xr;
    C[inc].c=yr;
    while (inc<=sf)
    {
        x=C[inc++];
        for (i=0;i<8;i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if (a[y.l][y.c]==-2)
            {
                a[y.l][y.c]=a[x.l][x.c]+1;
                C[++sf]=y;
            }
        }
    }
    inc=sf=0;
    b[xj][yj]=1;
    C[inc].l=xj;
    C[inc].c=yj;
    while (inc<=sf)
    {
        x=C[inc++];
        for (i=0;i<8;i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if (b[y.l][y.c]==-2)
            {
                b[y.l][y.c]=b[x.l][x.c]+1;
                C[++sf]=y;
            }
        }
    }
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
            //cout<<b[i][j]<<' ';//<<b[i][j]<<"  ";
            if (a[i][j]==b[i][j]&&a[i][j]>0)
            {
                if (Min>a[i][j])
                {
                    Min=a[i][j];
                    x1=i;
                    y1=j;
                }
            }
        }
        //cout<<'\n';
    }
    g<<Min<<' '<<x1<<' '<<y1;
    return 0;
}