Pagini recente » Cod sursa (job #2611986) | Cod sursa (job #1476119) | Cod sursa (job #1478806) | Cod sursa (job #234878) | Cod sursa (job #342187)
Cod sursa(job #342187)
#include<fstream.h>
#include<stdlib.h>
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,x1,y1,x2,y2;
int rom[101][101];
int jul[101][101];
int lin[8]={-1,-1,-1,0,1,1,1,0};
int col[8]={-1,0,1,1,1,0,-1,-1};
int tmin,xx,yy;
struct coordonate
{int x,y;
};
coordonate romeo[20001],julieta[20001];
void citire()
{int i,j;
char c;
fin>>n>>m;
fin.get(c);
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
{fin.get(c);
if(c==' ') {rom[i][j]=0;
jul[i][j]=0;
}
else if(c=='X') {rom[i][j]=-1;
jul[i][j]=-1;
}
else if(c=='R') {x1=i;
y1=j;
}
else {x2=i;
y2=j;
}
}
fin.get(c);
if(c!='\n')
while(c!='\n')
fin.get(c);
}
}
void lee()
{int ii,jj,k,p1,u1,p2,u2,i,j;
romeo[1].x=x1;
romeo[1].y=y1;
rom[x1][y1]=1;
julieta[1].x=x2;
julieta[1].y=y2;
jul[x2][y2]=1;
p1=u1=p2=u2=1;
while(p1<=u1 || p2<=u2)
{
for(k=0;k<=7;k++)
{ii=romeo[p1].x+lin[k];
jj=romeo[p1].y+col[k];
if(ii>=1 && ii<=n && jj>=1 && jj<=m)
if(rom[ii][jj]==0)
{rom[ii][jj]=rom[romeo[p1].x][romeo[p1].y]+1;
u1++;
romeo[u1].x=ii;
romeo[u1].y=jj;
// if(jul[ii][jj]==rom[ii][jj]) {fout<<jul[ii][jj]<<" "<<ii<<" "<<jj;
// exit(0);
// }
}
}
for(k=0;k<=7;k++)
{ii=julieta[p2].x+lin[k];
jj=julieta[p2].y+col[k];
if(ii>=1 && ii<=n && jj>=1 && jj<=m)
if(jul[ii][jj]==0)
{jul[ii][jj]=jul[julieta[p2].x][julieta[p2].y]+1;
u2++;
julieta[u2].x=ii;
julieta[u2].y=jj;
// if(jul[ii][jj]==rom[ii][jj]) {fout<<jul[ii][jj]<<" "<<ii<<" "<<jj;
// exit(0);
// }
}
}
p1++;
p2++;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(rom[i][j]==jul[i][j] && rom[i][j]>0)
if(tmin==0 || tmin>rom[i][j]) {tmin=rom[i][j];
xx=i;yy=j;
}
fout<<tmin<<" "<<xx<<" "<<yy<<'\n';
}
int main()
{citire();
lee();
fin.close();
fout.close();
return 0;
}