Pagini recente » Cod sursa (job #2097241) | Cod sursa (job #2297100) | Cod sursa (job #2047719) | Cod sursa (job #1259998) | Cod sursa (job #2147585)
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int a[105][105],mat[105][105],L,C,xr,yr,xj,yj;
short dx[] = {-1,-1,-1, 0, 1, 1, 1, 0};
short dy[] = {-1, 0, 1, 1, 1, 0,-1,-1};
struct coord
{
int x,y;
};
coord q[10000];
void Citire()
{
int i,j;
char s[110];
f>>L>>C;
f.get();
for(i=1; i<=L; i++)
{
f.getline(s,110);
for(j=0; j<C; j++)
if(s[j]==' ')
a[i][j+1] = 0;
else
if(s[j]=='X')
a[i][j+1] = 1;
else
if(s[j]=='R')
{
xr = i;
yr = j+1;
}
else
{
xj = i;
yj = j+1;
}
}
for(i=1; i<=L; i++)
for(j=1; j<=C; j++)
mat[i][j] = a[i][j];
f.close()
}
void Bordare()
{
int i,n,m;
n = L + 1;
m = C + 1;
for(i=0; i<=n; i++)
mat[i][0] = mat[i][m] = a[i][0] = a[i][m] = -1;
for(i=0; i<=m; i++)
mat[0][i] = mat[n][i] = a[0][i] = a[n][i] = -1;
}
void Romeo()
{
int i1,l1,i,j,x,y,k;
i1 = l1 = 0;
a[xr][yr] = 2;
q[l1].x = xr;
q[l1].y = yr;
while(i1<=l1)
{
i = q[i1].x;
j = q[i1].y;
i1++;
for(k=0; k<8; k++)
{
x = i + dx[k];
y = j + dy[k];
if(a[x][y] == 0)
{
l1++;
q[l1].x = x;
q[l1].y = y;
a[x][y] = a[i][j] + 1;
}
}
}
}
void Julieta()
{
int i1,l1,i,j,x,y,k;
i1 = l1 = 0;
mat[xj][yj] = 2;
q[l1].x = xj;
q[l1].y = yj;
while(i1<=l1)
{
i = q[i1].x;
j = q[i1].y;
i1++;
for(k=0; k<8; k++)
{
x = i + dx[k];
y = j + dy[k];
if(mat[x][y] == 0)
{
l1++;
q[l1].x = x;
q[l1].y = y;
mat[x][y] = mat[i][j] + 1;
}
}
}
}
void Afisare()
{
int i,j,lin=0,col=0,tmin=1000000;
for(i=1; i<=L; i++)
for(j=1; j<=C; j++)
{
if(a[i][j] == mat[i][j] && a[i][j] > 1)
{
if(a[i][j] - 1 < tmin)
{
tmin = a[i][j] - 1;
lin = i;
col = j;
}
}
}
g<<tmin;
g.close();
}
int main ()
{
Citire();
Bordare();
Romeo();
Julieta();
Afisare();
return 0;
}