Pagini recente » Cod sursa (job #2074375) | Cod sursa (job #2771825) | Cod sursa (job #1869059) | Cod sursa (job #1172878) | Cod sursa (job #702647)
Cod sursa(job #702647)
#include <iostream>
#include <fstream>
#include <queue>
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 punct{short int lin,col; int pas;};
short int 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')
{r[0][0]=x;r[1][0]=y;}
if(comun[x][y]=='J')
{j[0][0]=x;j[1][0]=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 bun (punct x)
{
if((1<=x.lin)&&(x.lin<=n))
if((1<=x.col)&&(x.col<=m))
if(comun[x.lin][x.col]!='X')
return true;
return false;
}
void lee (short int mat[][N])
{
queue <punct> coada;
punct start;
start.lin=mat[0][0];
start.col=mat[1][0];
start.pas=1;
coada.push (start);
while(!coada.empty())
{
punct temp;
temp=coada.front();
coada.pop();
if((bun(temp))&&(mat[temp.lin][temp.col]==0))
{
mat[temp.lin][temp.col]=temp.pas;
for(int i=0;i<8;i++)
{
punct baga;
baga.lin=temp.lin+dlin[i];
baga.col=temp.col+dcol[i];
baga.pas=temp.pas+1;
coada.push (baga);
}
}
}
}
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";
}
void afis ()
{
for(int a=1;a<=n;a++)
{
for(int b=1;b<=m;b++)
out<<j[a][b];
out<<"\n";
}
}
int main ()
{
citire();
lee(r);
lee(j);
//afis();
cauta();
return 0;
}