Cod sursa(job #1539988)

Utilizator icepinPredi Dragos icepin Data 1 decembrie 2015 21:31:27
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.73 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
int q[2][100001],Min=100000,h[102][102],r[102][102],a[102][102],OK,cj,lj,cr,lr,j,n,m,i,l,c,ch,sol1,sol2;
int x,y,p,u,dx[]= {-1,-1,0,1,1,1,0,-1},dy[]= {0,1,1,1,0,-1,-1,-1};
int main()
{

    fin>>n>>m;
    for(i=0; i<=n+1; i++)
    {
        a[i][0]=-1;
        a[i][m+1]=-1;
    }
    for (j=0; j<=m+1; j++)
    {
        a[0][j]=-1;
        a[n+1][j]=-1;
    }
    int ok=1;
    for(i=1; i<=n; i++)
    {
        if(ok==1)
        {
            fin.get();

        }
        ok=1;
        for(j=1; j<=m; j++)
        {
            ch=fin.get();
            if (ch=='X')
                a[i][j]=-1;
            else if (ch==' ')
                a[i][j]=0;
            else if (ch=='R')
            {

                lr=i;
                cr=j;
                r[i][j]=1;
            }
            else if (ch=='J')
            {

                lj=i;
                cj=j;
                h[i][j]=1;
            }
            else if(ch=='\n'&&j<=m)
            {
                ok=0;
                break;

            }
        }
    }

    OK=1;
    p=u=1;
    q[0][p]=lr;
    q[1][p]=cr;
    while(p<=u)
    {
        x=q[0][p];
        y=q[1][p];
        for(int i=0; i<8; i++)
        {
            int l=x+dx[i];
            int c=y+dy[i];
            if (a[l][c]==0&&r[l][c]==0&&OK==1)
            {
                q[0][++u]=l;
                q[1][u]=c;
                r[l][c]=r[x][y]+1;
            }
            else if (a[l][c]==0&&h[l][c]==0&&OK==2)
            {
                q[0][++u]=l;
                q[1][u]=c;
                h[l][c]=h[x][y]+1;
            }
        }
        p++;
    }

    OK=2;
    p=u=1;
    q[0][p]=lj;
    q[1][p]=cj;
    while(p<=u)
    {
        x=q[0][p];
        y=q[1][p];
        for(int i=0; i<8; i++)
        {
            int l=x+dx[i];
            int c=y+dy[i];
            if (a[l][c]==0&&r[l][c]==0&&OK==1)
            {
                q[0][++u]=l;
                q[1][u]=c;
                r[l][c]=r[x][y]+1;
            }
            else if (a[l][c]==0&&h[l][c]==0&&OK==2)
            {
                q[0][++u]=l;
                q[1][u]=c;
                h[l][c]=h[x][y]+1;
            }
        }
        p++;
    }

    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
        {
            if(r[i][j]==h[i][j]&&r[i][j]!=0)
            {
                if(Min>r[i][j])
                {
                    Min=r[i][j];
                    sol1=i;
                    sol2=j;
                }

            }
        }
    fout<<Min<<" "<<sol1<<" "<<sol2;

    return 0;
}