Pagini recente » Cod sursa (job #3213780) | Cod sursa (job #2490779) | Cod sursa (job #711702) | Cod sursa (job #1038002) | Cod sursa (job #2298105)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
const int dl[]= {1, 0, -1, 0, 1, 1, -1, -1};
const int dc[]= {0, 1, 0, -1, 1, -1, 1, -1};
const int N=100;
const int M=100;
struct poz
{
int l;
int c;
};
poz q[N*M],x,y,poz_r,poz_j;
int n,m,dr[N+1][M+1],dj[N+1][M+1];
char s[N+1];
void citire()
{
in>>n>>m>>ws;
for(int i=1; i<=n; ++i)
{
in.getline(s+1,N+1);
for(int j=1; s[j]; j++)
{
if(s[j]=='X')
{
dr[i][j]=dj[i][j]=-1;
}
else if(s[j]=='R')
{
dr[i][j]=1;
poz_r.l=i;
poz_r.c=j;
}
else if(s[j]=='J')
{
dj[i][j]=1;
poz_j.l=i;
poz_j.c=j;
}
}
}
}
void bordare(int a[N+1][M+1])
{
for(int i=0; i<=n+1; ++i)
{
a[i][0]=a[i][n+1]=-1;
}
for(int j=0; j<=m+1; ++j)
{
a[0][j]=a[n+1][j]=-1;
}
}
void lee(int a[N+1][M+1], poz pozstart)
{
int st=0;
int dr=-1;
q[++dr]=pozstart;
a[pozstart.l][pozstart.c]=1;
while(st<=dr)
{
x=q[st++];
for(int i=0; i<8; ++i)
{
y.l=x.l+dl[i];
y.c=x.c+dc[i];
if(a[y.l][y.c]==0)
{
q[++dr]=y;
a[y.l][y.c]=1+a[x.l][x.c];
}
}
}
}
int solve()
{
poz ans;
int t=200;
for(int i=1; i<=n; ++i)
{
for(int j=1; j<=m; ++j)
{
if(dr[i][j]>0 && dr[i][j]==dj[i][j] && dr[i][j]<t)
{
ans.l=i;
ans.c=j;
t=dr[i][j];
}
}
}
out<<t<<" "<<ans.l<<" "<<ans.c;
}
int main()
{
citire();
bordare(dr);
bordare(dj);
lee(dr,poz_r);
lee(dj,poz_j);
solve();
return 0;
}