Pagini recente » Cod sursa (job #2344960) | Cod sursa (job #2514480) | Cod sursa (job #1096142) | Cod sursa (job #991349) | Cod sursa (job #1883777)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int N=102;
const int dl[4]= {1,0,-1,0};
const int dc[4]= {0,1,0,-1};
char a[N][N];
int dr[N][N],dj[N][N];
struct poz
{
int l,c;
} x,y,xj,xr;
poz q[N*N];
int i,j,min1,min2;
void bordare (int n, int m)
{
int i;
for (i=0; i<=n; i++)
{
dr[i][0]=-99;
dr[i][n+1]=-99;
}
for (i=0; i<=m; i++)
{
dr[0][i]=-99;
dr[n+1][i]=-99;
}
for (i=0; i<=n; i++)
{
dj[i][0]=-99;
dj[i][n+1]=-99;
}
for (i=0; i<=m; i++)
{
dj[0][i]=-99;
dj[n+1][i]=-99;
}
}
int lee (poz x0,int d[N][N])
{
int p=0,u=-1;
q[++u] = x0;
while (p<=u)
{
x=q[p++];
for (i=0; i<4; i++)
{
y.l=x.l+dl[i];
y.c=x.c+dc[i];
if (d[y.l][y.c]==-1)
{
d[y.l][y.c] = 1 + d[x.l][x.c];
q[++u] = y;
}
}
}
}
int main()
{
int n,m,min=99999;
f>>n>>m>>ws;
for (i=1; i<=n; i++)
{
f.getline(1+a[i],N);
for (j=1; j<=m; j++)
{
if (a[i][j]=='X')
{
dj[i][j]=-99;
dr[i][j]=-99;
}
if (a[i][j]==' ')
{
dj[i][j]=-1;
dr[i][j]=-1;
}
if (a[i][j]=='R')
{
dr[i][j]=0;
xr = (poz)
{
i, j
};
}
if (a[i][j]=='J')
{
dj[i][j]=0;
xj = (poz)
{
i, j
};
}
}
}
bordare(n,m);
lee(xr,dr);
lee (xj,dj);
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (dr[i][j]==dj[i][j])
if (min>dr[i][j]&&dr[i][j]>0)
{
min=dr[i][j];
min1 =i;
min2=j;
}
g<<min<<" "<<min1<<" "<<min2;
return 0;
}