Cod sursa(job #890934)

Utilizator c0dr1nMares Codrin c0dr1n Data 25 februarie 2013 12:48:41
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const short int dx[]={1,0,-1,0,1,-1,-1,1};
const short int dy[]={0,1,0,-1,1,-1,1,-1};
short int mat1[100][100],mat2[100][100];
short int coada1[2][10000];
short int coada2[2][10000];
short int m,n;
ifstream in("rj.in");
ofstream out("rj.out");




void RJ(short int x1,short int y1,short int x2,short int y2)
{
    short int i,top1,top2,k,j,tmin;
    top1=1;top2=1;

    coada1[0][0]=x1;coada1[1][0]=y1;
    coada2[0][0]=x2;coada2[1][0]=y2;

    for(i=0;i<top1;i++)
    {
        x1=coada1[0][i];
        y1=coada1[1][i];

        for(k=0;k<8;k++)
        {
            if(x1+dx[k]>=0 && y1+dy[k]>=0 && x1+dx[k]<n && y1+dy[k]<m && mat1[x1+dx[k]][y1+dy[k]]==0)
                {coada1[0][top1]=x1+dx[k];
                coada1[1][top1]=y1+dy[k];
                mat1[x1+dx[k]][y1+dy[k]]=mat1[x1][y1]+1;
                top1++;}

        }

    }

    for(j=0;j<top2;j++)
    {
        x2=coada2[0][j];
        y2=coada2[1][j];

        for(k=0;k<8;k++)
        {
            if(x2+dx[k]>=0 && y2+dy[k]>=0 && x2+dx[k]<n && y2+dy[k]<m && mat2[x2+dx[k]][y2+dy[k]]==0)
                {coada2[0][top2]=x2+dx[k];
                coada2[1][top2]=y2+dy[k];
                mat2[x2+dx[k]][y2+dy[k]]=mat2[x2][y2]+1;
                top2++;}

        }

    }



    tmin=100;
    for(i=0;i<n;i++)
        for(k=0;k<m;k++)
            if(mat1[i][k]==mat2[i][k] && mat1[i][k]>0 && mat1[i][k]<tmin)
               {tmin=mat1[i][k];
                x1=i+1;y1=k+1;}
    out<<tmin<<" "<<x1<<" "<<y1;



}



int main()
{
    short int x1,y1,x2,y2,i,k;
    string x;
    in>>n>>m;
 getline(in,x);
 for(i=0;i<n;i++)
 {
  getline(in,x);
  for(k=0;k<m;k++)
  {
   if(x[k]=='X') {mat1[i][k]=-1; mat2[i][k]=-1;}
    else
   if(x[k]=='R') {mat1[i][k]=1; x1=i; y1=k;}
    else
   if(x[k]=='J') {mat2[i][k]=1; x2=i; y2=k;}

  }
 }


    RJ(x1,y1,x2,y2);



out.close();
in.close();
}