Cod sursa(job #806402)

Utilizator jolgauSecret Fidel jolgau Data 2 noiembrie 2012 18:51:09
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
#include<iostream>
#include<fstream>
using namespace std;

#define INFINIT 99999

ifstream f("rj.in");
ofstream g("rj.out");

struct Pozitie{int lin,col;}pr,pj,p,v;
Pozitie C[111*111];

int rom[111][111];
int jul[111][111];

void lee(Pozitie ps,int a[111][111])
{
int prim=0,ultim=0;
a[ps.lin][ps.col] = 1;
C[0] = ps;

int dl[]={0, 1, 0, -1, -1, 1, -1, 1};
int dc[]={1, 0, -1, 0, -1, 1,  1,-1};

while(prim <= ultim)
     {
      p = C[prim]; prim++;
      for(int i=0; i<8; i++)
         {
          v.lin = p.lin + dl[i];
          v.col = p.col + dc[i];
          if(a[v.lin][v.col] == 0)
             {
              a[v.lin][v.col] = a[p.lin][p.col] + 1;

              ultim++;
              C[ultim] = v;
             }
         }
     }
}

void bordare(int n,int m,int a[111][111])
{
for(int i=0; i<=n+1; i++)
    a[i][0] = -1,a[i][m+1] = -1;
for(int i=0; i<=m+1; i++)
    a[0][i] = -1,a[n+1][i] = -1;
}

void rezolvare(int a[111][111],int b[111][111],int n,int m)
{
int i,j,tmin=INFINIT,xmin,ymin;
for(i=1; i<=n; i++)
    for(j=1; j<=m; j++)
        if(a[i][j] == b[i][j] && a[i][j] != -1 && a[i][j] != 0)
           if(a[i][j] < tmin)
              tmin = a[i][j],xmin = i,ymin = j;
g<<tmin<<" "<<xmin<<" "<<ymin;
}

int main()
{
int i,j,n,m;
char a[111];

f>>n>>m;
for(i=1; i<=n; i++)
   {
    f.ignore();
    f.get(a,111);
    for(j=1; j<=m; j++)
       {
        if(a[j-1] == ' ')
           rom[i][j] = 0,jul[i][j] = 0;
        else if(a[j-1] == 'X')
           rom[i][j] = -1,jul[i][j] = -1;
        else if(a[j-1] == 'R')
           {
            rom[i][j] = 0;
            jul[i][j] = 0;
            pr.lin = i;
            pr.col = j;
           }
        else
           {
            rom[i][j] = 0;
            jul[i][j] = 0;
            pj.lin = i;
            pj.col = j;
           }
       }
   }

bordare(n,m,rom);
bordare(n,m,jul);
lee(pr,rom);
lee(pj,jul);
rezolvare(rom,jul,n,m);

f.close();
g.close();
return 0;
}