Cod sursa(job #868895)

Utilizator superman_01Avramescu Cristian superman_01 Data 31 ianuarie 2013 18:59:21
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.96 kb
#include<cstdio>
#include<string.h>
 
FILE *fin=fopen("rj.in", "r");
FILE *fout=fopen("rj.out", "w");
 
using namespace std;
 
int n,m,xr,yr,xj,yj,mj[105][105],mr[105][105];
int l[10005],coloana[10005];
 
void generare()
{
    int i,j;
    char c[105];
      fscanf(fin, "%d%d", &n, &m);
    fscanf(fin, "%c", &c);
  
    for(i=1;i<=n;i++)
    {
        fgets(c,m+2, fin);
  
        for(j=0;j<=m-1;j++)
            {
                if(c [j]=='R')
                {
                    mr[i][j+1]=1;
                    mj[i][j+1]=-2;
                    xr=i, yr=j+1;
  
                }
                else if(c[j]=='J')
                {
                    mr[i][j+1]=-2;
                    mj[i][j+1]=1;
                    xj=i, yj=j+1;
  
                }
                else if(c[j]=='X')
  
                    mr[i][j+1]=mj[i][j+1]=-1;
  
                else if(c[j]==' ')
                    mj[i][j+1]=mr[i][j+1]=-2;
  
            }
    }
     
}
 
 
 
 
void Lee_julieta()
{
    int i,j;
    int x,y,k;
    int xnou,ynou;
    int dx[]={-1,0,0,1,-1,1,1,-1},dy[]={0,1,-1,0,-1,-1,1,1};
    k=1;
    l[1]=xj;
    coloana[1]=yj;
    for(i=1;i<=k;i++)
    {
        x=l[i];
        y=coloana[i];
     
        for(j=0;j<=7;j++)
        {
            xnou=x+dx[j];
            ynou=y+dy[j];
            if(mj[xnou][ynou]==-2)
                 
                 
            {   
                mj[xnou][ynou]=mj[x][y]+1;
                k++;
                l[k]=xnou;
                coloana[k]=ynou;
             
            }
             
             
        }
         
    }
     
     
}
 
void Lee_romeo()
{
    int i,j;
    int x,k,y;
    int xnou,ynou;
    int dx[]={-1,0,0,1,-1,1,1,-1},dy[]={0,1,-1,0,-1,-1,1,1};
    k=1;
    l[1]=xr;
    coloana[1]=yr;
    for(i=1;i<=k;i++)
    {
        x=l[i];
        y=coloana[i];
     
        for(j=0;j<=7;j++)
        {
            xnou=x+dx[j];
            ynou=y+dy[j];
            if(mr[xnou][ynou]==-2)
             
            {   
                mr[xnou][ynou]=mr[x][y]+1;
                k++;
                l[k]=xnou;
                coloana[k]=ynou;
             
            }
                 
             
        }
         
    }
     
     
}
 
void comparare()
 
{
    int i,j,l,c,timp;
     
     
    timp=2000000;
     
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if( (mr[i][j]==mj[i][j]) && (mj[i][j]!=-1) && (mj[i][j]!=-2) )
            {
              
                   if(mj[i][j]<timp)
 
                   { 
                       timp=mj[i][j];
                       l=i;
                       c=j;
                   }    
            }
             
     
    fprintf(fout,"%d %d %d",timp, l, c);
         
    fclose(stdout); 
     
}
 
int main()
{
     
    generare();
    Lee_romeo();
    Lee_julieta();
        comparare();
    return 0;
}