Cod sursa(job #1996226)

Utilizator MikeStrikeAgache Mihai MikeStrike Data 30 iunie 2017 17:06:04
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.47 kb
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string.h>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int a[105][105],n,m,x,y,k,r[105][105],jj[105][105],tmin=105*105,imin,jmin;
char c[101];
struct pozitie
{
    int i,j;
};
pozitie coada[101*101],startr,stopr,urm,dir[8]={0,1,1,0,0,-1,-1,0,1,1,1,-1,-1,1,-1,-1},startj,stopj;
void bordare()
{
    for(int i=0;i<=n+1;i++)
        a[i][0]=r[i][0]=jj[i][0]=a[i][m+1]=r[i][m+1]=jj[i][m+1]=-1;
    for(int j=0;j<=m+1;j++)
        a[0][j]=r[0][j]=jj[0][j]=a[n+1][j]=r[n+1][j]=jj[n+1][j]=-1;


}
void afis()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++) out<<setw(3)<<jj[i][j];
        out<<endl;
    }
    out<<endl;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++) out<<setw(3)<<r[i][j];
        out<<endl;
    }
}
void leer()
{
    coada[1]=startr;
    int kout=1,kin=1;
    while(kout<=kin)
    {
        x=coada[kout].i;
        y=coada[kout].j;
        for(int i=0;i<8;i++)
        {
            urm.i=coada[kout].i+dir[i].i;
            urm.j=coada[kout].j+dir[i].j;
            if(r[urm.i][urm.j]==0)
            {
                coada[++kin]=urm;
                r[urm.i][urm.j]=r[coada[kout].i][coada[kout].j]+1;
            }
        }
       kout++;
    }


}
void leej()
{
    coada[1]=startj;
    int kout=1,kin=1;
    while(kout<=kin)
    {
        x=coada[kout].i;
        y=coada[kout].j;
        for(int i=0;i<8;i++)
        {
            urm.i=coada[kout].i+dir[i].i;
            urm.j=coada[kout].j+dir[i].j;
            if(jj[urm.i][urm.j]==0)
            {
                coada[++kin]=urm;
                jj[urm.i][urm.j]=jj[coada[kout].i][coada[kout].j]+1;
            }
        }
       kout++;
    }


}
int main()
{  in>>n>>m;
for(int i=1;i<=n;i++)
  {in.get();
int j=1;

     in.get(c,101);
  for(k=0;k<strlen(c);k++)
  {if(c[k]==' ') {a[i][j]=0;r[i][j]=0;jj[i][j]=0;}
  else if(c[k]==88) {a[i][j]=-1;r[i][j]=-1;jj[i][j]=-1;}
   else if(c[k]==82) {startr.i=i;startr.j=j;r[i][j]=1;}
   else {startj.i=i;startj.j=j;jj[i][j]=1;}
   j++;

  }

    }
//out<<startr.i<<" "<<startr.j<<" "<<startj.i<<" "<<startj.j<<" ";
//out<<endl;
bordare();
leer();
leej();
for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    if(r[i][j]==jj[i][j])
{
    if(r[i][j]<tmin && r[i][j]!=-1 && r[i][j]!=0) {tmin=r[i][j];imin=i;jmin=j;}
}
out<<tmin<<" "<<imin<<" "<<jmin;
//afis();
    return 0;
}