Pagini recente » Cod sursa (job #1355513) | Cod sursa (job #1243723) | Cod sursa (job #312161) | Cod sursa (job #2456180) | Cod sursa (job #2407139)
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
ifstream fi("rj.in");
ofstream fo("rj.out");
const int nmax=100, mmax=100;
int n, m, lrstart, crstart, ljstart, cjstart, mini=2e9, lf, cf;
int dl[]={-1, -1, 0, 1, 1, 1, 0, -1}, dc[]={0, 1, 1, 1, 0, -1, -1, -1};
int R[nmax+5][mmax+5], J[nmax+5][mmax+5];
queue <pair <int, int> > Q;
bool inMatrice(int l, int c)
{
if(l>=1 && l<=n && c>=1 && c<=m)
return 1;
return 0;
}
void lee(int A[][mmax+5])
{
while(!Q.empty())
{
int lin=Q.front().first;
int col=Q.front().second;
Q.pop();
for(int d=0; d<8; d++)
{
int lnou=lin+dl[d];
int cnou=col+dc[d];
if(A[lnou][cnou]==0 && inMatrice(lnou, cnou))
{
A[lnou][cnou]=A[lin][col]+1;
Q.push({lnou, cnou});
}
}
}
}
int main()
{
fi>>n>>m;
for(int i=1;i<=n;i++)
{
char c;
fi.get(c);
for(int j=1;j<=m;j++)
{
fi.get(c);
switch(c)
{
case 'X': R[i][j]=J[i][j]=-1; break;
case 'R': lrstart=i,crstart=j; R[i][j]=1; break;
case 'J': ljstart=i,cjstart=j; J[i][j]=1; break;
default: R[i][j]=J[i][j]=0;
}
}
}
Q.push({lrstart, crstart});
lee(R);
Q.push({ljstart, cjstart});
lee(J);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(R[i][j]==J[i][j] && R[i][j]<mini && R[i][j]>0)
{
mini=R[i][j];
lf=i;
cf=j;
}
}
}
fo<<mini<<" "<<lf<<" "<<cf;
fi.close();
fo.close();
return 0;
}