Pagini recente » Cod sursa (job #1092084) | Cod sursa (job #689721) | Cod sursa (job #2987973) | Cod sursa (job #193915) | Cod sursa (job #1841303)
#include <iostream>
#include <fstream>
#include <string.h>
#include <queue>
using namespace std;
int N,M;
char R[102][102],J[102][102];
struct coord{int a,b;}a,b;
struct returne{int a,b,c;};
void citire()
{
char v[104];
ifstream f ("rj.in");
f>>N>>M;
f.get();
int i,j;
for (i=1;i<=N;++i)
{
f.get(R[i],102);
f.get();
if (strlen(R[i])!=M)
for (j=R[i][strlen(R[i])];j<M;++j)
R[i][j]=32;
strcpy(v+1,R[i]);
v[0]=32;
strcpy(R[i],v);
strcpy(J[i],R[i]);
}
}
void RsiJ()
{
bool c,d;
int i;
for (i=0,c=1,d=1;c || d;++i)
{
if (c)
if (strchr(R[i],'R')-R[i]>=0)
{
a.a=i;
a.b=strchr(R[i],'R')-R[i];
c=0;
}
if (d)
if (strchr(R[i],'J')-R[i]>=0)
{
b.a=i;
b.b=strchr(R[i],'J')-R[i];
d=0;
}
}
}
bool verifR(coord e)
{
if (e.a>0 && e.a<=N && e.b>0 && e.b<=M && R[e.a][e.b]==32)
return 1;
return 0;
}
bool verifJ(coord e)
{
if (e.a>0 && e.a<=N && e.b>0 && e.b<=M && J[e.a][e.b]==32)
return 1;
return 0;
}
void leeR()
{
int i;
queue<coord>d;
d.push(a);
R[a.a][a.b]=1;
R[b.a][b.b]=32;
coord e;
while (!d.empty())
{
for (i=1;i<=8;++i)
{
switch(i)
{
case 1:{e.a=d.front().a-1;e.b=d.front().b;break;}
case 2:{e.a=d.front().a+1;e.b=d.front().b;break;}
case 3:{e.b=d.front().b-1;e.a=d.front().a;break;}
case 4:{e.b=d.front().b+1;e.a=d.front().a;break;}
case 5:{e.a=d.front().a-1;e.b=d.front().b-1;break;}
case 6:{e.a=d.front().a-1;e.b=d.front().b+1;break;}
case 7:{e.a=d.front().a+1;e.b=d.front().b-1;break;}
case 8:{e.a=d.front().a+1;e.b=d.front().b+1;break;}
}
if (verifR(e))
{
if (R[d.front().a][d.front().b]==31)
R[e.a][e.b]=33;
else
R[e.a][e.b]=1+R[d.front().a][d.front().b];
d.push(e);
}
}
d.pop();
}
}
void leeJ(returne &op)
{
op.a=10400;
int c[2][8],i;
queue<coord>d;
d.push(b);
J[a.a][a.b]=32;
J[b.a][b.b]=1;
coord e;
while (!d.empty())
{
if (J[d.front().a][d.front().b]==R[d.front().a][d.front().b] && J[d.front().a][d.front().b]<op.a)
{
op.a=J[d.front().a][d.front().b];
op.b=d.front().a;
op.c=d.front().b;
}
for (i=1;i<=8;++i)
{
switch(i)
{
case 1:{e.a=d.front().a-1;e.b=d.front().b;break;}
case 2:{e.a=d.front().a+1;e.b=d.front().b;break;}
case 3:{e.b=d.front().b-1;e.a=d.front().a;break;}
case 4:{e.b=d.front().b+1;e.a=d.front().a;break;}
case 5:{e.a=d.front().a-1;e.b=d.front().b-1;break;}
case 6:{e.a=d.front().a-1;e.b=d.front().b+1;break;}
case 7:{e.a=d.front().a+1;e.b=d.front().b-1;break;}
case 8:{e.a=d.front().a+1;e.b=d.front().b+1;break;}
}
if (verifJ(e))
{
if (J[d.front().a][d.front().b]==31)
J[e.a][e.b]=33;
else
J[e.a][e.b]=1+J[d.front().a][d.front().b];
d.push(e);
}
}
d.pop();
}
}
int main()
{
citire();
RsiJ();
leeR();
returne opp;
leeJ(opp);
if (opp.a>32)
--opp.a;
ofstream g ("rj.out");
g<<opp.a<<' '<<opp.b<<' '<<opp.c;
}