Pagini recente » Cod sursa (job #2839488) | Cod sursa (job #473436) | Cod sursa (job #353758) | Cod sursa (job #2182728) | Cod sursa (job #1545820)
#include <fstream>
using namespace std;
struct liniecoloana
{
int lin; int col;
};
liniecoloana ps,pc,poz,c[102],p,v,aux;
int dl[]={1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1},a[102][102],b[102][102],n,m,ok,i,j,prim,ultim,k,min1,c1[102][102];
char ch[102];
ifstream f("rj.in");
ofstream g("rj.out");
int main()
{
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
f.getline(ch,102);
for(j=1;j<=m;j++)
{
if(ch[j-1]=='X')
{ a[i][j]=-1; b[i][j]=-1; }
else
if(ch[j-1]=='J')
{ ps.lin=i; ps.col=j; a[i][j]=0; b[i][j]=0; }
else
if(ch[j-1]==' ')
{ a[i][j]=0; b[i][j]=0; }
else
if(ch[j-1]=='R')
{ pc.lin=i; pc.col=j; a[i][j]=0; b[i][j]=0;
}
}
}
for(i=0;i<=m+1;i++)
{ a[0][i]=-1; a[n+1][i]=-1; b[0][i]=1; b[n+1][i]=-1; c1[0][i]=-1; c1[n+1][i]=-1; }
for(i=0;i<=n+1;i++)
{ a[i][0]=b[i][0]=-1; a[i][m+1]=b[i][m+1]=-1; c1[i][0]=-1; c1[i][m+1]=-1; }
//Julieta
prim=ultim=0;
c[0]=ps;
a[ps.lin][ps.col]=1;
ok=1;
while(prim<=ultim)
{
p=c[prim];
prim++;
for(k=0;k<8;k++)
{
v.lin=p.lin+dl[k];
v.col=p.col+dc[k];
if(a[v.lin][v.col]==0)
{
a[v.lin][v.col]=a[p.lin][p.col]+1;
ultim++;
c[ultim]=v;
}
}
}
//Romea
aux=ps;
ps=pc;
pc=aux;
prim=ultim=0;
c[0]=ps;
b[ps.lin][ps.col]=1;
ok=1;
while(prim<=ultim)
{
p=c[prim];
prim++;
for(k=0;k<8;k++)
{
v.lin=p.lin+dl[k];
v.col=p.col+dc[k];
if(b[v.lin][v.col]==0)
{
b[v.lin][v.col]=b[p.lin][p.col]+1;
ultim++;
c[ultim]=v;
}
}
}
min1=102*102+5;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==b[i][j]&&a[i][j]>0&&c1[i][j]!=-1)
{
if(min1>a[i][j])
{ min1=a[i][j]; poz.lin=i; poz.col=j; }
}
/*for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
g<<a[i][j]<<' ';
g<<'\n';
}
g<<'\n';
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
g<<b[i][j]<<' ';
g<<'\n';
}
g<<'\n';*/
g<<min1<<' '<<poz.lin<<' '<<poz.col<<'\n';
return 0;
}