Pagini recente » Cod sursa (job #124320) | Cod sursa (job #2411949) | Cod sursa (job #1247463) | Cod sursa (job #1515096) | Cod sursa (job #2425167)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
#define INF 99999
ifstream f("rj.in");
ofstream g("rj.out");
int n, m,romeoMat[111][111],julieMat[111][111];
int di[10] = {-1,-1,-1,0,1,1,1,0};
int dj[10] = {-1,0,1,1,1,0,-1,-1};
queue <pair <int,int> > C1,C2;
void citire()
{
char x;
f >> n >> m;
f.get();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
f.get(x);
if(x == 'R')
{
C1.push(make_pair(i,j));
romeoMat[i][j] = 1;
julieMat[i][j] = 0;
}
else if(x == 'J')
{
C2.push(make_pair(i,j));
julieMat[i][j] = 1;
romeoMat[i][j] = 0;
}
else if(x == 'X')
{
romeoMat[i][j] = -1;
julieMat[i][j] = -1;
}
else
{
romeoMat[i][j] = INF;
julieMat[i][j] = INF;
}
}
f.get();
}
}
void bordare(int mat[111][111])
{
for(int i = 1; i <= n; i++)
mat[i][0] = mat[i][m+1] = -1;
for(int j = 0; j <= m; j++)
mat[0][j] = mat[n+1][j] = -1;
}
void rj(int mat[111][111], queue <pair<int,int> > C)
{
pair <int,int> nodCurent,vecin;
int x,y;
while(C.empty()==false)
{
nodCurent=C.front();
C.pop();
for(int i = 0; i < 8; i++)
{
x = di[i] + nodCurent.first;
y = dj[i] + nodCurent.second;
vecin = make_pair(x,y);
if(mat[x][y] > 0 && mat[x][y] > mat[nodCurent.first][nodCurent.second] + 1)
{
mat[x][y] = mat[nodCurent.first][nodCurent.second] + 1;
C.push(vecin);
}
}
}
}
int main()
{
citire();
bordare(romeoMat);
bordare(julieMat);
rj(romeoMat,C1);
bordare(julieMat);
rj(julieMat,C2);
int minn,x,y;
for(int i =1; i <=n; i++)
for(int j = 1; j <= m; j++)
if( romeoMat[i][j]>0 && romeoMat[i][j]==julieMat[i][j])
{
minn=romeoMat[i][j];
x=i;
y=j;
}
g<<minn<<" "<<x<<" "<<y;
}