Cod sursa(job #889444)

Utilizator dascalutudorDascalu Tudor dascalutudor Data 24 februarie 2013 15:20:23
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <fstream>
#include<iostream>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");

int mar[105][105],maj[105][105],n,m,xr,yr,xj,yj,x[105],y[105];
char a[10000001];
const int dx[]={0,1,1,1,0,-1,-1,-1};
const int dy[]={1,1,0,-1,-1,-1,0,1};
void citire()
{  int i,j;
     in>>n>>m;
    in.getline(a,10001);
    for(i=1;i<=n;i++)
    {   in.getline(a,10001);
        for(j=0;j<m;j++)
        {   if(a[j]=='R'){mar[i][j+1]=1;xr=i;yr=j+1;}
            if(a[j]=='J'){maj[i][j+1]=1;xj=i;yj=j+1;}
            if(a[j]=='X') { mar[i][j+1]=1; maj[i][j+1]=1;}
        }
    }
}
   /* void afisare()
    {   int i,j;
        for(i=1;i<=n;i++)
           {

            for(j=1;j<=m;j++)
        {   out<<mar[i][j]<<" ";


        }
        out<<endl;
           }
           out<<endl;
           for(i=1;i<=n;i++)
           {

            for(j=1;j<=m;j++)
        {   out<<maj[i][j]<<" ";


        }
        out<<endl;
           }
           out<<endl;
    }*/
    int bun(int ii,int jj)
    {
        return((jj>0)&&(ii>0)&&(ii<n+1)&&(jj<m+1));
    }
    void leecoada(int xo[105][105],int pozi, int pozj)
    {   int first=0,last=0,k,ii,jj;
        x[0]=pozi;
        y[0]=pozj;
        while(first<=last)
        {ii=x[first];
            jj=y[first];
         first++;
        for(k=0;k<8;k++)
        {

            if(bun(ii+dx[k],jj+dy[k]))
                if(xo[ii+dx[k]][jj+dy[k]]==0)
                {   last=last+1;
                    xo[ii+dx[k]][jj+dy[k]]=xo[ii][jj]+1;


                    x[last]=ii+dx[k];
                    y[last]=jj+dy[k];

                }
        }

        }
    }



int main()
{   int mini=10000,i,j,xmin=1000,ymin=1000;
  citire();

  leecoada(mar,xr,yr);
  leecoada(maj,xj,yj);

  for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
    {if((mar[i][j]==maj[i][j])&&(maj[i][j]>1)&&(mini>=maj[i][j]))
        {   if(mini=maj[i][j])
        {
            if(xmin>i)
            {
                xmin=i;
                ymin=j;
            }
        }
        else{mini=maj[i][j];

           xmin=i;
            ymin=j;
        }

        }


    }
    out<<mini<<" "<<xmin<<" "<<ymin;

            return 0;
}