Cod sursa(job #1884147)

Utilizator KropiusRezmerita Mihnea Kropius Data 18 februarie 2017 14:40:10
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.31 kb

#include <iostream>
#include <fstream>
#include <cstring>
#include <climits>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int dx[]={0, 1, 0, -1, -1, 1, -1, 1};
int dy[]={1, 0, -1, 0, -1, 1,  1,-1};
struct coord{int x,y;};
coord c[10000],c2[10000];
int n,m,a[102][102],xr,yr,xj,yj; int b[102][102];

void citire()
{
char c;
fin>>n>>m;
fin.get(c);
for (int i=1; i<=n; i++)
	{
	    for (int k=1; k<=m; k++)
		{   fin.get(c);
            if(c=='X'){b[i][k]=-1;a[i][k]=-1;}
            if(c==' '){b[i][k]=0;a[i][k]=0;}
            if (c=='R') {xr=i; yr=k; b[i][k]=0;a[i][k]=1;}
            if (c=='J') {xj=i; yj=k; b[i][k]=1;a[i][k]=0;}

		}
	fin.get(c);}
fin.close();
}

int interior(int x, int y)
{
    return(x>=1&&x<=n&&y>=1&&y<=m);
}

void lee(int x,int y)
{
    int p,u;
    p=u=1;
    c[p].x=x;
    c[p].y=y;
    a[x][y]=1;
    while(p<=u)
    {
        x=c[p].x;
        y=c[p].y;
        p++;
        for(int i=0;i<8;i++)
        {
            int xv=x+dx[i];
            int yv=y+dy[i];
            if(a[xv][yv]==0&&interior(xv,yv)==1)
            {
                u++;
                a[xv][yv]=a[x][y]+1;
                c[u].x=xv;
                c[u].y=yv;
            }

        }
    }
}

void lee2(int x,int y)
{
    int p,u;
    p=u=1;
    c2[p].x=x;
    c2[p].y=y;
    b[x][y]=1;
    while(p<=u)
    {
        x=c2[p].x;
        y=c2[p].y;p++;
        for(int i=0;i<8;i++)
        {
            int xv=x+dx[i];
            int yv=y+dy[i];
            if(b[xv][yv]==0&&interior(xv,yv)==1)
            {
                u++;
                b[xv][yv]=b[x][y]+1;
                c2[u].x=xv;
                c2[u].y=yv;
            }
        }
    }
}

int main()
{
   citire();
   lee(xr,yr);
   lee2(xj,yj);
  /* for(int i=1;i<=n;i++)
   {
       for(int j=1;j<=m;j++)
            fout<<a[i][j]<<" ";
       fout<<endl;
   }
   for(int i=1;i<=n;i++)
   {

       for(int j=1;j<=m;j++)
            fout<<b[i][j]<<" ";
       fout<<endl;
   }*/

   int xmin=INT_MAX,ymin=INT_MAX,tmin=INT_MAX;
   for(int i=1;i<=n;i++)
   {
       for(int j=1;j<=m;j++)
            if(a[i][j]==b[i][j]&&a[i][j]!=-1&&a[i][j]<tmin){xmin=i;ymin=j;tmin=a[i][j];}
   }
   fout<<tmin<<" "<<xmin<<" "<<ymin<<" ";
    return 0;
}