Pagini recente » Cod sursa (job #2765106) | Dezintegrare | Istoria paginii runda/cgfhfjdkfyul | Cod sursa (job #919740) | Cod sursa (job #702536)
Cod sursa(job #702536)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("rj.in");
ofstream out("rj.out");
const int N=105;
const short int dlin[]={-1,-1,0,1,1,1,0,-1};
const short int dcol[]={0,1,1,1,0,-1,-1,-1};
struct personaje{short int lin,col;} romeo,julie;
struct punct{short int lin,col; int pas;}coadar[N*N],coadaj[N*N];
int frontr,backr,r[N][N];
int frontj,backj,j[N][N];
char comun[N][N];
int n,m;
void plecari (int x, int y)
{
if(comun[x][y]==' ')
return;
if(comun[x][y]=='R')
{romeo.lin=x;romeo.col=y;}
if(comun[x][y]=='J')
{julie.lin=x;julie.col=y;}
}
void citire ()
{
in>>n>>m;
for(int i=1;i<=n;i++)
{
comun[i][1]=in.get();
for(int j=1;j<=m;j++)
{
comun[i][j]=in.get();
plecari(i,j);
}
}
}
bool bunr (int x)
{
if((1<=coadar[x].lin)&&(coadar[x].lin<=n))
if((1<=coadar[x].col)&&(coadar[x].col<=m))
if(comun[coadar[x].lin][coadar[x].col]==' ')
return true;
return false;
}
bool bunj (int x)
{
if((1<=coadaj[x].lin)&&(coadaj[x].lin<=n))
if((1<=coadaj[x].col)&&(coadaj[x].col<=m))
if(comun[coadaj[x].lin][coadaj[x].col]==' ')
return true;
return false;
}
void puncoadar (int x, int y, int p)
{
coadar[frontr].lin=x;
coadar[frontr].col=y;
coadar[frontr].pas=p+1;
frontr++;
}
void puncoadaj (int x, int y, int p)
{
coadaj[frontj].lin=x;
coadaj[frontj].col=y;
coadaj[frontj].pas=p+1;
frontj++;
}
void vecinir(int x, int y)
{
for(int i=0;i<8;i++)
puncoadar(x+dlin[i],y+dcol[i],r[x][y]);
}
void vecinij(int x, int y)
{
for(int i=0;i<8;i++)
puncoadaj(x+dlin[i],y+dcol[i],j[x][y]);
}
void pasromeo()
{
if(bunr(backr))
{
if(r[coadar[backr].lin][coadar[backr].col]==0)
{
r[coadar[backr].lin][coadar[backr].col]=coadar[backr].pas;
vecinir(coadar[backr].lin,coadar[backr].col);
}
}
backr++;
}
void pasjulie()
{
if(bunj(backj))
{
if(j[coadaj[backj].lin][coadaj[backj].col]==0)
{
j[coadaj[backj].lin][coadaj[backj].col]=coadaj[backj].pas;
vecinij(coadaj[backj].lin,coadaj[backj].col);
}
}
backj++;
}
void initromeo ()
{
r[romeo.lin][romeo.col]=1;
vecinir(romeo.lin,romeo.col);
}
void initjulie ()
{
j[julie.lin][julie.col]=1;
vecinij(julie.lin,julie.col);
}
void afisc ()
{
cout<<"\n\n";
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<comun[i][j];
cout<<"\n";
}
}
void afisr ()
{
cout<<"\n\n";
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<r[i][j];
cout<<"\n";
}
}
void afisj ()
{
cout<<"\n\n";
for(int i=1;i<=n;i++)
{
for(int k=1;k<=m;k++)
cout<<j[i][k];
cout<<"\n";
}
}
void cauta ()
{
int linmini,colmini,mini=N*N;
for(int a=1;a<=n;a++)
for(int b=1;b<=m;b++)
if(r[a][b]==j[a][b])
if((r[a][b]<mini)&&(r[a][b]!=0))
{
mini=r[a][b];
linmini=a;
colmini=b;
}
out<<mini<<" "<<linmini<<" "<<colmini<<"\n";
}
int main ()
{
citire();
initromeo();
initjulie();
while(backr<=frontr)
pasromeo();
while(backj<=frontj)
pasjulie();
afisc();
afisr();
afisj();
cauta();
return 0;
}