Cod sursa(job #1925530)

Utilizator edi4ever4Agarici Eduard edi4ever4 Data 13 martie 2017 12:37:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int xR,yR,xJ,yJ,n,m;
int dx[]={1,1,1,-1,-1,-1,0,0};
int dy[]={1,-1,0,1,-1,0,1,-1};
struct coada
{int x,y;};
void Citire(int a[102][102],int b[102][102],int &n,int &m)
{int i,j;
 char s[110];
    fin>>n>>m;
    fin.get();
 for(i=0;i<n;i++)
   { fin.getline(s,110);
     for(j=0;j<m;j++)
      {  if(s[j]=='X') a[i][j]=b[i][j]=-1;
         else if(s[j]=='R')  {a[i][j]=b[i][j]=-2;xR=i;yR=j;}
         else if(s[j]=='J')  {a[i][j]=b[i][j]=-3;xJ=i;yJ=j;}
        else a[i][j]=b[i][j]=0;
      }
   }
}
void BFS(int a[102][102],int x,int y)
{ coada c[100001],nod,vecin;
  int pr,ul,i;
  pr=ul=1;
  a[x][y]=1;
  c[pr].x=x;
  c[pr].y=y;
     while(pr<=ul)
     { nod.x=c[pr].x;
       nod.y=c[pr++].y;
       for(i=0;i<8;i++)
         {vecin.x=nod.x+dx[i];
          vecin.y=nod.y+dy[i];
          if(vecin.x>=0 && vecin.y>=0 && vecin.x<n && vecin.y<m)
              if(!a[vecin.x][vecin.y])
                 {a[vecin.x][vecin.y]=a[nod.x][nod.y]+1;
                  c[++ul].x=vecin.x;
                  c[ul].y=vecin.y;
                 }
         }
     }
}
void AfisareMatrice(int a[102][102])
{int i,j;
  for(i=0;i<n;i++)
     {for(j=0;j<m;j++)
       fout<<a[i][j]<<" ";
       fout<<"\n";
     }
    fout<<"\n";
}
int main()
{int a[102][102],x,y,b[102][102],i,j,maxim=100001;
 Citire(a,b,n,m);
 BFS(a,xR,yR);
 BFS(b,xJ,yJ);
 //AfisareMatrice(a);
 //AfisareMatrice(b);
 for(i=0;i<n;i++)
    for(j=0;j<m;j++)
       if(a[i][j]>0 && b[i][j]>0)
       if(max(a[i][j],b[i][j])<maxim)
        {maxim=max(a[i][j],b[i][j]);
         x=i;y=j;
        }
 fout<<maxim<<" "<<x+1<<" "<<y+1;
    return 0;
}