Cod sursa(job #1774686)

Utilizator MotoAMotoi Alexandru MotoA Data 9 octombrie 2016 12:21:55
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 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[100];
int d[4][2] = {{0,-1}, {-1,0}, {0,1}, {1,0}};
int l[101][101],a[101][101];
void bordare()
{
    int i;
    for(i = 0; i <= m + 1; i++)         l[i][0] = l[i][n + 1] = a[i][0]= a[i][n+1]= -1;
    for(i = 0; i <= n + 1; i++)         l[0][i] = l[m + 1][i] = a[0][i]= a[m+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 < 4; 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 < 4; 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=INT_MAX;
   for(i=1;i<=n;i++)
   {f.getline(s,100);
    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;}
   }
   bordare();
    lee1(r,ju);
    lee2(ju,r);

 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<<" "<<lin<<" "<<col;

    return 0;
}