Cod sursa(job #919201)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 19 martie 2013 14:51:46
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include<fstream>
#define FIN "rj.in"
#define FOUT "rj.out"
#define DimMax 102
#define DimMaxCoada 10404
 
using namespace std;
 
ifstream fin(FIN);
ofstream fout(FOUT);
 
void read();
void solve(int lr,int cr,int aa[DimMax][DimMax]);
void write();
 
int n,m,i,j,lr,cr,lj,cj,k,minim,lin,col;
int dx[]={0, 1, 0, -1, -1, 1, -1, 1},dy[]={1, 0, -1, 0, -1, 1,  1,-1};
char a[DimMax][DimMax],c;
int R[DimMax][DimMax],J[DimMax][DimMax];
 
 
int main()
{
read();
solve(lr,cr,R);
solve(lj,cj,J);
write();
fout.close();
return 0;
}
 
void read()
{
fin>>n>>m;
fin.get(c);
for(i=1;i<=n;i++)
     {
     for(j=1;j<=m;j++)
         {
         fin.get(a[i][j]);
         if(a[i][j]=='R')
             lr=i,cr=j;
         else if(a[i][j]=='J')
             lj=i,cj=j;
         }
     fin.get(c);
     }
for(i=0;i<=n+1;i++)
     a[i][0]=a[i][m+1]='X';
for(i=0;i<=m+1;i++)
     a[0][i]=a[n+1][i]='X';
a[lj][cj]=a[lr][cr]=' ';
}
 
void solve(int ll,int cc,int aa[DimMax][DimMax])
{
struct Lee
     {
     int l,c;
     unsigned d;
     }C[DimMaxCoada],x,y;
int inc=0,sf=0;
 
for(i=0;i<=n+1;i++)
    for(j=0;j<=m+1;j++)
        aa[i][j]=-1;
x.l=ll;
x.c=cc;
x.d=1;
aa[ll][cc]=1;
C[inc]=x;
while(inc<=sf)
     {
      x=C[inc++];
      for(k=0;k<8;k++)
          {
           y.l=x.l+dx[k];
           y.c=x.c+dy[k];
           if(a[y.l][y.c]==' '&&aa[y.l][y.c]==-1)
               {
                y.d=x.d+1;
                aa[y.l][y.c]=y.d;
                C[++sf]=y;
               }
          }
     }
}
 
void write()
{
minim=9999;
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        if(R[i][j]==J[i][j])
            if(R[i][j]<minim&&R[i][j]!=-1)
                minim=R[i][j],lin=i,col=j;
fout<<minim<<' '<<lin<<' '<<col;
}