Pagini recente » Cod sursa (job #2384456) | Cod sursa (job #588935) | Cod sursa (job #2888409) | Cod sursa (job #2523670) | Cod sursa (job #2140724)
#include<bits/stdc++.h>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
bool v[105][105];
int ro[105][105],ju[105][105],n,m;
int diri[] = {1,-1,0,0,1,1,-1,-1};
int dirj[] = {0,0,1,-1,1,-1,1,-1};
bool ok1(int i, int j)
{
return (!ro[i][j] && !v[i][j] && i>=1 && i<=n && j>=1 && j<=m);
}
bool ok2(int i, int j)
{
return (!ju[i][j] && !v[i][j] && i>=1 && i<=n && j>=1 && j<=m);
}
int main()
{
char x;
int x1,y1,x2,y2;
in >> n >> m;
for (int i = 1; i<=n; i++)
{
for (int j = 1; j<=m; j++)
{
in.get(x);
if (x == '\n')
{
if (j == m)
continue;
else
in.get(x);
}
if (x == 'R')
{
x1 = i;
y1 = j;
v[i][j] = 1;
}
else if (x == 'J')
{
x2 = i;
y2 = j;
v[i][j] = 1;
}
else if (x == 'X')
v[i][j] = 1;
}
}
queue< pair<int,int> > Q;
Q.push(make_pair(x1,y1));
ro[x1][y1] = 1;
while (!Q.empty())
{
int i = Q.front().first;
int j = Q.front().second;
for (int k = 0; k<8; k++)
{
int i2 = i+diri[k];
int j2 = j+dirj[k];
if (ok1(i2,j2))
{
ro[i2][j2] = 1+ro[i][j];
Q.push(make_pair(i2,j2));
}
}
Q.pop();
}
Q.push(make_pair(x2,y2));
ju[x2][y2] = 1;
while (!Q.empty())
{
int i = Q.front().first;
int j = Q.front().second;
for (int k = 0; k<8; k++)
{
int i2 = i+diri[k];
int j2 = j+dirj[k];
if (ok2(i2,j2))
{
ju[i2][j2] = 1+ju[i][j];
Q.push(make_pair(i2,j2));
}
}
Q.pop();
}
int Min = n*m+1,xr,yr;
for (int i = 1; i<=n; i++)
for (int j = 1; j<=m; j++)
if (ro[i][j] == ju[i][j] && ro[i][j]<Min && ro[i][j]>0)
{
Min = ro[i][j];
xr = i;
yr = j;
}
out << Min << " " << xr << " " << yr;
}