Pagini recente » Cod sursa (job #508876) | Cod sursa (job #2291520) | Cod sursa (job #1009746) | Cod sursa (job #2401966) | Cod sursa (job #2565751)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int R[103][103],J[103][103],iR,jR,iJ,jJ;
int n,m;
queue <pair<int,int> > q;
int di[]={-1,0,1,0};
int dj[]={0,1,0,-1};
void Citire()
{
fin>>n>>m;
char s[104];
fin.getline(s,104);
for(int i=1;i<=n;i++)
{
char linie[103];
fin.getline(linie,103);
for(int j=0;j<m;j++)
{
char c=linie[j];
switch(c)
{
case 'X':
R[i][j+1]=J[i][j+1]=-1;
break;
case ' ':
R[i][j+1]=J[i][j+1]=0;
break;
case 'R':
R[i][j+1]=J[i][j+1]=0;
iR=i;
jR=j+1;
break;
case 'J':
R[i][j+1]=J[i][j+1]=0;
iJ=i;
jJ=j+1;
}
}
}
}
void Bordare()
{
for(int i=0;i<=n+1;i++)
R[i][0]=R[i][m+1]=J[i][0]=J[i][m+1]=-1;
for(int j=0;j<=m+1;j++)
R[0][j]=R[n+1][j]=J[0][j]=J[n+1][j]=-1;
}
void LeeR()
{
q.push({iR,jR});
while(!q.empty())
{
int i=q.front().first,j=q.front().second;
for(int k=0;k<4;k++)
{
int vi=i+di[k],vj=j+dj[k];
if(R[vi][vj]==0)
{
R[vi][vj]=R[i][j]+1;
q.push({vi,vj});
}
}
q.pop();
}
}
void LeeJ()
{
q.push({iJ,jJ});
while(!q.empty())
{
int i=q.front().first,j=q.front().second;
for(int k=0;k<4;k++)
{
int vi=i+di[k],vj=j+dj[k];
if(J[vi][vj]==0)
{
J[vi][vj]=J[i][j]+1;
q.push({vi,vj});
}
}
q.pop();
}
}
void Afisare()
{
int vmin=100000,im,jm;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(R[i][j]==J[i][j] && R[i][j]>0 && R[i][j]<vmin)
{
vmin=R[i][j];
im=i;
jm=j;
}
fout<<vmin<<" "<<im<<" "<<jm;
}
int main()
{
Citire();
Bordare();
LeeR();
LeeJ();
Afisare();
return 0;
}