Cod sursa(job #497703)

Utilizator raul_rautzuBedeoan Raul raul_rautzu Data 3 noiembrie 2010 09:07:36
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.74 kb
#include<fstream>
#include<iostream>
#include<string>

using namespace std;
fstream f("rj.in",ios::in),
        g("rj.out",ios::out);
int n,m,a[100][100],b[100][100],i1,j1;
int nr;
    void lee(int p,int r);
   void lee2(int p,int r);
   void fu();
void bordare()
{int i;
 for(i=0;i<=n+1;i++)
 {
   a[i][0]=-4;
   a[i][n+1]=-4;
   a[0][i]=-4;
   a[n+1][i]=-4;
   b[i][0]=-4;
   b[i][n+1]=-4;
   b[0][i]=-4;
   b[n+1][i]=-4;
   }
 }

int main()
{
    nr=100;
int i,j,R1,x,R2,J1,J2;
string line,p;
 f>>n>>m;
 getline(f,p);
x=1;
while(x<=n)
{
getline(f,line);
for(i=0;i<m;i++)
{
p=line[i];
    if(p=="X")
    {

      a[x][i+1]=-1;
       b[x][i+1]=-1;
      }
   if(p=="R")
   {
       R1=x;
       R2=i+1;
     a[x][i+1]=-2;
     b[x][i+1]=-2;}
   if(p=="J")
   {
       J1=x;J2=i+1;
    a[x][i+1]=-3;
    b[x][i+1]=-3;
    }

  }
x++;
}

bordare();
a[R1][R2]=0;
b[J1][J2]=0;
lee(R1,R2);
lee2(J1,J2);
fu();
cout<<nr<<" "<<i1<<" "<<j1;
 }
void lee(int p,int r)
{
    if(a[p+1][r]==0)
      {
       a[p+1][r]=a[p][r]+1;
       lee(p+1,r);
        }
       if(a[p-1][r]==0)
      {
       a[p-1][r]=a[p][r]+1;
       lee(p-1,r);
        }
        if(a[p][r-1]==0)
      {
       a[p][r-1]=a[p][r]+1;
       lee(p,r-1);
        }
        if(a[p][r+1]==0)
      {
       a[p][r+1]=a[p][r]+1;
       lee(p,r+1);
        }
        if(a[p-1][r-1]==0)
      {
       a[p-1][r-1]=a[p][r]+1;
       lee(p-1,r-1);
        }
        if(a[p+1][r+1]==0)
      {
       a[p+1][r+1]=a[p][r]+1;
       lee(p+1,r+1);
        }
        if(a[p-1][r+1]==0)
      {
       a[p-1][r+1]=a[p][r]+1;
       lee(p-1,r+1);
        }
        if(a[p+1][r-1]==0)
      {
       a[p+1][r-1]=a[p][r]+1;
       lee(p+1,r-1);
        }
}

void lee2(int p,int r)
{
    if(b[p+1][r]==0)
      {
       b[p+1][r]=b[p][r]+1;
       lee2(p+1,r);
        }
       if(b[p-1][r]==0)
      {
       b[p-1][r]=b[p][r]+1;
       lee2(p-1,r);
        }
        if(b[p][r-1]==0)
      {
       b[p][r-1]=b[p][r]+1;
       lee2(p,r-1);
        }
        if(b[p][r+1]==0)
      {
       b[p][r+1]=b[p][r]+1;
       lee2(p,r+1);
        }
        if(b[p-1][r-1]==0)
      {
       b[p-1][r-1]=b[p][r]+1;
       lee2(p-1,r-1);
        }
        if(b[p+1][r+1]==0)
      {
       b[p+1][r+1]=b[p][r]+1;
       lee2(p+1,r+1);
        }
        if(b[p-1][r+1]==0)
      {
       b[p-1][r+1]=b[p][r]+1;
       lee2(p-1,r+1);
        }
        if(b[p+1][r-1]==0)
      {
       b[p+1][r-1]=b[p][r]+1;
       lee2(p+1,r-1);
        }

}
void fu()
{
    int i,j;

for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==b[i][j])
   if((a[i][j]<nr)&&(a[i][j]>0))
   {
    nr=a[i][j];
    i1=i;j1=j;
   }
}