Pagini recente » Cod sursa (job #1839052) | infoarena - te ajutam sa devii olimpic! | Cod sursa (job #1083583) | Cod sursa (job #1839214) | Cod sursa (job #1776407)
#include <fstream>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
const int N = 105,M = 105;
const int dl[] = {-1,0,0,1,-1,-1,1,1};
const int dc[] = {0,-1,1,0,-1,1,-1,1};
struct poz
{
int l,c;
};
poz q1[N*M],q2[N*M],x,y;
char a[N][M];
int r[N][M],j[N][M],p1,p2,u1,u2;
int main()
{
int n,m,i,k,imin,kmin,min = 150;
in>>n>>m>>ws;
for(i=0; i<=n+1; i++)
{
r[i][0]=r[i][m+1] = -2;
j[i][0]=j[i][m+1] = -2;
}
for(k=0; k<=m+1; k++)
{
r[0][k]=r[n+1][k] = -2;
j[0][k]=j[n+1][k] = -2;
}
p1 = p2 = 0;
u1 = u2 = -1;
for(i=1; i<=n; i++)
{
in.getline(1+a[i],N);
//out << "am citit:\n" << 1 + a[i] << "\n";
for(k=1; k<=m; k++)
{
if(a[i][k]=='X')
r[i][k] = j[i][k] = -2;
if(a[i][k]==' ')
r[i][k] = j[i][k] = -1;
if(a[i][k]=='R')
{
r[i][k] = 0;
q1[++u1]=(poz)
{
i,k
};
}
if(a[i][k]=='J')
{
j[i][k]= 0;
q2[++u2]=(poz)
{
i,k
};
}
}
}
while(p1<=u1)
{
x = q1[p1++];
for(i=0; i<8; i++)
{
y.l = x.l + dl[i];
y.c = x.c + dc[i];
if(r[y.l][y.c]==-1)
{
r[y.l][y.c]=1+r[x.l][x.c];
q1[++u1]=y;
}
}
}
while(p2<=u2)
{
x = q2[p2++];
for(i=0; i<8; i++)
{
y.l = x.l + dl[i];
y.c = x.c + dc[i];
if(j[y.l][y.c]==-1)
{
j[y.l][y.c]=1+j[x.l][x.c];
q2[++u2]=y;
}
}
}
for(i=1; i<=n; i++)
for(k=1; k<=m; k++)
{
if(r[i][k]==j[i][k] && r[i][k]<=min && r[i][k] > 0)
{
min = r[i][k] + 1;
imin = i;
kmin = k;
}
}
out<<min<<" "<<imin<<" "<<kmin;
return 0;
}