Pagini recente » Cod sursa (job #336001) | Cod sursa (job #2583206) | Cod sursa (job #1918117) | Cod sursa (job #2868783) | Cod sursa (job #695130)
Cod sursa(job #695130)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int o[8]={-1,-1,-1,0,0,1,1,1};
int v[8]={-1,0,1,-1,1,-1,0,1};
struct coada { int lin,col; } c[1000];
int mat[100][100],n,m,xr,yr,xj,yj,inc,sf,mat_r[101][101],mat_j[101][101],l,i,j,x;
char a[1000];
void citire()
{
fin>>n>>m;
fin.get();
for(i=1;i<=n;i++)
{
fin.getline(a,101);
for(x=0;x<m;x++)
{
if(a[x]=='X') mat_r[i][x+1]=mat_j[i][x+1]=-1;
if(a[x]=='R') {xr=i;yr=x+1;}
if(a[x]=='J') {xj=i;yj=x+1;}
}
}
fin.close();
}
int corectr(int li,int co)
{ return li>=1 && li<=n && co>=1 && co<=m && mat_r[li][co]==0; }
int corectj(int li,int co)
{ return li>=1 && li<=n && co>=1 && co<=m && mat_j[li][co]==0; }
void adaug_r(int x,int y)
{ sf++;
c[sf].lin=x; c[sf].col=y; }
void adaug_j(int x,int y)
{ sf++;
c[sf].lin=x; c[sf].col=y; }
void romeo()
{
inc=1;
mat_r[xr][yr]=1;
adaug_r(xr,yr);
while(inc<=sf)
{ for(int i=0;i<8;i++)
if(corectr(c[inc].lin+o[i],c[inc].col+v[i]))
{ mat_r[c[inc].lin+o[i]][c[inc].col+v[i]]=
mat_r[c[inc].lin][c[inc].col]+1;
adaug_r(c[inc].lin+o[i],c[inc].col+v[i]); }
inc++; }
}
void julieta()
{
inc=1;
sf=0;
mat_j[xj][yj]=1;
adaug_j(xj,yj);
while(inc<=sf)
{
for(int i=0;i<8;i++)
if(corectj(c[inc].lin+o[i],c[inc].col+v[i])){
mat_j[c[inc].lin+o[i]][c[inc].col+v[i]]=mat_j[c[inc].lin][c[inc].col]+1;
adaug_j(c[inc].lin+o[i],c[inc].col+v[i]);
}
inc++;
}
}
void afisare()
{
int Mx=999999999,mxi,mxj;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(mat_r[i][j]==mat_j[i][j] && mat_r[i][j]>0) if(mat_r[i][j]<Mx) {Mx=mat_r[i][j];mxi=i;mxj=j;}
fout<<Mx<<' '<<mxi<<' '<<mxj;
}
int main()
{
citire();
romeo();
julieta();
afisare();
return 0;
fin.close();
fout.close();
}