Cod sursa(job #1126249)

Utilizator OctaDuiu Octavian Octa Data 26 februarie 2014 22:13:12
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include<fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,i,j,a[101][101],b[101][101],ii,jj;
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1, 1,1,0,-1,-1,-1};
char A[101][101];

void bordare()
{
    for(i=0;i<=n+1;++i)
        A[i][0]=A[i][m+1]='X';
    for(i=1;i<=m;++i)
        A[0][i]=A[n+1][i]='X';
}
struct coada
{
    int l,c;
} C[100001];

void lee1(int x , int y)
{
    int p,u,la,ca,lv,cv;
    C[1].l=x;C[1].c=y;
    p=1;u=1;
    a[x][y]=1;
    while(p<=u)
    {
        la=C[p].l;
        ca=C[p].c;

        for(int i=0;i<8;++i)
        {
            lv=la+dx[i];
            cv=ca+dy[i];
           if(A[lv][cv]==' ' && a[lv][cv]>a[la][ca]+1)
            {
                ++u;
                C[u].l=lv; C[u].c=cv;
                a[lv][cv]=a[la][ca]+1;
            }
        }
      ++p;
    }
}
void lee2(int x , int y)
{
    int p,u,la,ca,lv,cv;
    C[1].l=x;C[1].c=y;
    p=1;u=1;
    b[x][y]=1;
    while(p<=u)
    {
        la=C[p].l;
        ca=C[p].c;

        for(int i=0;i<8;++i)
        {
            lv=la+dx[i];
            cv=ca+dy[i];
           if(A[lv][cv]==' ' && b[lv][cv]>b[la][ca]+1)
            {
                ++u;
                C[u].l=lv; C[u].c=cv;
                b[lv][cv]=b[la][ca]+1;
            }
        }
      ++p;
    }


}
int main ()
{
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;++i)
      {
          for(j=1;j<=m;++j)   fin.get(A[i][j]),a[i][j]=1000000,b[i][j]=1000000;
          fin.get();
      }

    void bordare();

    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            if(A[i][j]=='R')     lee1(i,j);
             else
                if(A[i][j]=='J') lee2(i,j);

    int Min=1000000;

  for(i=1;i<=n;++i)
    for(j=1;j<=m;++j)
    {
        if(a[i][j]==b[i][j]&& Min>a[i][j])
         {
             Min=a[i][j];
             ii=i;
             jj=j;
         }
    }
    fout<<Min<<' '<<ii<<' '<<jj;
return 0;

}