Cod sursa(job #1774749)

Utilizator MotoAMotoi Alexandru MotoA Data 9 octombrie 2016 13:34:12
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct coord
{
    int l,c;
};
coord r,ju,c[10000];
int m,n;
char s[103];
int d[8][2] = {{0,-1}, {-1,0}, {0,1}, {1,0}, {-1,-1},{-1,1},{1,1},{1,-1}};
int l[102][102],a[102][102];
void bordare()
{
    int i;
    for(i = 0; i <= n + 1; i++)         l[i][0] = l[i][m + 1] = a[i][0]= a[i][m+1]= -1;
    for(i = 0; i <= m + 1; i++)         l[0][i] = l[n + 1][i] = a[0][i]= a[n+1][i]= -1;
}
void lee1(coord inceput,coord sf)
{
    coord vec, crt;
    int p,u;
     p = u = 1;
   c[1] =inceput ;
    while(p <= u && a[sf.l][sf.c]==0)
    {
        crt = c[p++];
        for(int i = 0; i < 8; i++)
        {
            vec.l = crt.l + d[i][0];
            vec.c = crt.c + d[i][1];
            if(a[vec.l][vec.c] == 0)
            {
                a[vec.l][vec.c] = a[crt.l][crt.c] + 1;
                c[++u] = vec;
            }
        }
    }
}
void lee2(coord inceput,coord sf)
{
    coord vec, crt;
    int p,u;
    p = u = 1;
    c[1] =inceput ;
    while(p <= u && l[sf.l][sf.c]==0)
    {
        crt = c[p++];
        for(int i = 0; i < 8; i++)
        {
            vec.l = crt.l + d[i][0];
            vec.c = crt.c + d[i][1];
            if(l[vec.l][vec.c] == 0)
            {
                l[vec.l][vec.c] = l[crt.l][crt.c] + 1;
                c[++u] = vec;
            }
        }
    }
}

int main()
{  f>>n>>m;
   f.get();
   int lin,col,i,j, minx=2147483600;
   for(i=1;i<=n;i++)
   {f.getline(s,101);
    for(j=0;j<m;j++)
    if(s[j]=='R'){r.l=i;r.c=j+1;}
     else if(s[j]=='J'){ju.l=i;ju.c=j+1;}
      else if(s[j]=='X'){l[i][j+1]=a[i][j+1]=-1;}
   }
  /* for(i=0;i<8;i++)
 {for(j=0;j<2;j++)
        cout<<d[i][j]<<endl;
  cout<<endl;}*/
/*
 for(i=1;i<=n;i++)
  {for(j=1;j<=m;j++)
    if(a[i][j]==-1)g<<'X';
    else g<<' ';
    g<<endl;}
g<<endl;*/
    bordare();
    lee1(r,ju);
    lee2(ju,r);

 /*for(i=1;i<=n;i++)
  {for(j=1;j<=m;j++)
    g<<l[i][j]<<" ";
    g<<endl;}*/
 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
  if(a[i][j]==l[i][j])
 if(l[i][j]>0 && l[i][j]<minx){minx=l[i][j];lin=i;col=j;}
    g<<minx+1<<" "<<lin<<" "<<col;
}