Pagini recente » Cod sursa (job #2941994) | Cod sursa (job #2483588) | Cod sursa (job #699563) | Cod sursa (job #196978) | Cod sursa (job #695221)
Cod sursa(job #695221)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int r[105][105],ju[105][105],t;
int o[8]={0, 1, 0, -1, -1, 1, -1, 1};
int v[8]={1, 0, -1, 0, -1, 1, 1,-1};
struct coada { int lin,col; } c[1000];
int n,m,xr,yr,xj,yj,inc,sf,i,j;
char b[102];
void citire()
{
fin>>n>>m;
fin.get();
for(i=1;i<=n;i++)
{
fin.getline(b,100);
for(int k=0;k<=strlen(b);k++)
{
if(b[k]=='X') {ju[i][k+1]=-1;r[i][k+1]=-1;}
if(b[k]=='R') {xr=i;yr=k+1;}
if(b[k]=='J') {xj=i;yj=k+1;}
}
}
}
void afisare()
{
int Min=99999999,Mini,Minj;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if((r[i][j]==ju[i][j])&&(r[i][j]>0)) if(r[i][j]<Min) {Min=r[i][j];Mini=i;Minj=j;}
fout<<Min<<" "<<Mini<<" "<<Minj;
}
int corectj(int li,int co)
{ return li>=1 && li<=n && co>=1 && co<=m && ju[li][co]==0; }
void adaugj(int x,int y)
{ sf++;
c[sf].lin=x; c[sf].col=y; }
int corectr(int li,int co)
{ return li>=1 && li<=n && co>=1 && co<=m && r[li][co]==0; }
void adaugr(int x,int y)
{ sf++;
c[sf].lin=x; c[sf].col=y; }
void romeo()
{
inc=1;
r[xr][yr]=1;
adaugr(xr,yr);
while(inc<=sf)
{ for(int i=0;i<8;i++)
if(corectr(c[inc].lin+o[i],c[inc].col+v[i]))
{ r[c[inc].lin+o[i]][c[inc].col+v[i]]=r[c[inc].lin][c[inc].col]+1;
adaugr(c[inc].lin+o[i],c[inc].col+v[i]); }
inc++; }
}
void julieta()
{
ju[xj][yj]=1;
inc=1;
sf=0;
adaugj(xj,yj);
while(inc<=sf)
{ for(int i=0;i<8;i++)
if(corectj(c[inc].lin+o[i],c[inc].col+v[i]))
{ ju[c[inc].lin+o[i]][c[inc].col+v[i]]=ju[c[inc].lin][c[inc].col]+1;
adaugj(c[inc].lin+o[i],c[inc].col+v[i]); }
inc++; }
}
int main()
{
citire();
romeo();
julieta();
afisare();
fin.close();
fout.close();
return 0;
}