Pagini recente » Cod sursa (job #2859920) | Cod sursa (job #261774) | Arhiva de probleme | Cod sursa (job #1688076) | Cod sursa (job #1372891)
#include <fstream>
#include <iostream>
//#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct poz
{
int x,y;
};
queue <poz> q;
int n,m;
poz auxr, auxj;
char v[110];
int ra[105][105], ja[105][105];
int ox[]={ 1, 0,-1, 0, 1,-1, 1,-1};
int oy[]={ 0, 1, 0,-1,-1, 1, 1,-1};
void citire ()
{
int i,j;
fin.get();
for(i=1; i<=n; i++)
{
fin.getline(v,m+1);
cout<<v;
for(j=0;j<strlen(v); j++)
{
if( v[j]== 'X') ra[i][j+1]=ja[i][j+1]=-1;
if( v[j] == 'R')
{
ra[i][j+1]=1;
auxr.x=i;
auxr.y=j+1;
}
if(v[j] == 'J')
{
ja[i][j+1]=1;
auxj.x=i;
auxj.y=j+1;
}
}
}
}
void bordare ()
{
int i,j;
for(i=0; i<=n+1;i++)
ra[i][0]=ra[i][m+1]=ja[i][0]=ja[i][m+1]=-1;
for(j=0; j<=m+1; j++)
ra[0][j]=ra[n+1][j]=ja[0][j]=ja[n+1][j]=-1;
}
void leeR()
{
q.push(auxr);
int k;
while(!q.empty())
{
for(k=0;k<8; k++)
{
auxr.x=q.front().x+ox[k];
auxr.y=q.front().y+oy[k];
if(ra[auxr.x][auxr.y] == 0)
{
ra[auxr.x][auxr.y]=ra[q.front().x][q.front().y]+1;
q.push(auxr);
}
}
q.pop();
}
}
void leeJ()
{
q.push(auxj);
int k;
while(!q.empty())
{
for(k=0;k<8; k++)
{
auxj.x=q.front().x+ox[k];
auxj.y=q.front().y+oy[k];
if(!ja[auxj.x][auxj.y])
{
ja[auxj.x][auxj.y]=ja[q.front().x][q.front().y]+1;
q.push(auxj);
}
}
q.pop();
}
}
void afisareR()
{
int i,j;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
if(ra[i][j]==-1 || ra[i][j]>9)
cout<<ra[i][j];
else
cout<<ra[i][j]<<" ";
cout<<'\n';
}
}
void afisareJ()
{
int i,j;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
if(ja[i][j]==-1 || ja[i][j]>9)
cout<<ja[i][j];
else
cout<<ja[i][j]<<" ";
cout<<'\n';
}
}
int main()
{
int i,j,nmin, mini=-1,minj=-1;
fin>>n>>m;
cout<<n<<m;
citire();
bordare();
leeJ();
leeR();
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(ra[i][j]== ja[i][j] && ra[i][j]> 0)
{
if(ra[i][j]< nmin)
{
nmin=ra[i][j];
mini=i;
minj=j;
}
}
fout<<nmin<<" "<<mini<<" "<<minj;
return 0;
}