Cod sursa(job #342187)

Utilizator PopaStefanPopa Stefan PopaStefan Data 20 august 2009 19:13:09
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.38 kb
#include<fstream.h>
#include<stdlib.h>

ifstream fin("rj.in");
ofstream fout("rj.out");

int n,m,x1,y1,x2,y2;
int rom[101][101];
int jul[101][101];
int lin[8]={-1,-1,-1,0,1,1,1,0};
int col[8]={-1,0,1,1,1,0,-1,-1};

int tmin,xx,yy;

struct coordonate
  {int x,y;
  };
coordonate romeo[20001],julieta[20001];

void citire()
{int i,j;
char c;
fin>>n>>m;
fin.get(c);
for(i=1;i<=n;i++)
  {for(j=1;j<=m;j++)
       {fin.get(c);
       if(c==' ') {rom[i][j]=0;
                   jul[i][j]=0;
                  }
         else if(c=='X') {rom[i][j]=-1;
                          jul[i][j]=-1;
                         }
                else if(c=='R') {x1=i;
                                 y1=j;
                                }
                       else {x2=i;
                             y2=j;
                            }

        }
   fin.get(c);
   if(c!='\n')
     while(c!='\n')
        fin.get(c);
  }
}

void lee()
{int ii,jj,k,p1,u1,p2,u2,i,j;
romeo[1].x=x1;
romeo[1].y=y1;
rom[x1][y1]=1;
julieta[1].x=x2;
julieta[1].y=y2;
jul[x2][y2]=1;
p1=u1=p2=u2=1;
while(p1<=u1 || p2<=u2)
  {
  for(k=0;k<=7;k++)
    {ii=romeo[p1].x+lin[k];
     jj=romeo[p1].y+col[k];
     if(ii>=1 && ii<=n && jj>=1 && jj<=m)
       if(rom[ii][jj]==0)
         {rom[ii][jj]=rom[romeo[p1].x][romeo[p1].y]+1;
          u1++;
          romeo[u1].x=ii;
          romeo[u1].y=jj;
         // if(jul[ii][jj]==rom[ii][jj]) {fout<<jul[ii][jj]<<" "<<ii<<" "<<jj;
          //                              exit(0);
           //                            }
         }
    }
   for(k=0;k<=7;k++)
    {ii=julieta[p2].x+lin[k];
     jj=julieta[p2].y+col[k];
     if(ii>=1 && ii<=n && jj>=1 && jj<=m)
       if(jul[ii][jj]==0)
         {jul[ii][jj]=jul[julieta[p2].x][julieta[p2].y]+1;
          u2++;
          julieta[u2].x=ii;
          julieta[u2].y=jj;
         // if(jul[ii][jj]==rom[ii][jj]) {fout<<jul[ii][jj]<<" "<<ii<<" "<<jj;
         //                               exit(0);
         //                              }
         }
    }
  p1++;
  p2++;
  }

for(i=1;i<=n;i++)
 for(j=1;j<=m;j++)
    if(rom[i][j]==jul[i][j] && rom[i][j]>0)
      if(tmin==0 || tmin>rom[i][j]) {tmin=rom[i][j];
                    xx=i;yy=j;
                  }
 fout<<tmin<<" "<<xx<<" "<<yy<<'\n';
}

int main()
{citire();
lee();
fin.close();
fout.close();
return 0;
}