Pagini recente » Cod sursa (job #2297098) | Cod sursa (job #2495268) | Diferente pentru preoji/clasament/10 intre reviziile 21 si 22 | Cod sursa (job #32931) | Cod sursa (job #702557)
Cod sursa(job #702557)
#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;}coada[N*N];
int front,back,r[N][N],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<=coada[x].lin)&&(coada[x].lin<=n))
if((1<=coada[x].col)&&(coada[x].col<=m))
if(comun[coada[x].lin][coada[x].col]==' ')
return true;
return false;
}
bool bunj (int x)
{
if((1<=coada[x].lin)&&(coada[x].lin<=n))
if((1<=coada[x].col)&&(coada[x].col<=m))
if(comun[coada[x].lin][coada[x].col]==' ')
return true;
return false;
}
void puncoadar (int x, int y, int p)
{
coada[front].lin=x;
coada[front].col=y;
coada[front].pas=p+1;
front++;
}
void puncoadaj (int x, int y, int p)
{
coada[front].lin=x;
coada[front].col=y;
coada[front].pas=p+1;
front++;
}
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(back))
{
if(r[coada[back].lin][coada[back].col]==0)
{
r[coada[back].lin][coada[back].col]=coada[back].pas;
vecinir(coada[back].lin,coada[back].col);
}
}
back++;
}
void pasjulie()
{
if(bunj(back))
{
if(j[coada[back].lin][coada[back].col]==0)
{
j[coada[back].lin][coada[back].col]=coada[back].pas;
vecinij(coada[back].lin,coada[back].col);
}
}
back++;
}
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();
while(back<=front)
pasromeo();
front=back=0;
initjulie();
while(back<=front)
pasjulie();
afisc();
afisr();
afisj();
cauta();
return 0;
}