Pagini recente » Cod sursa (job #594079) | Cod sursa (job #2496757) | Cod sursa (job #2284708) | Cod sursa (job #1137972) | Cod sursa (job #2149591)
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
struct Coordonate
{
int x;
int y;
};
struct Pozitie
{
int continut;
int distanta;
};
bool esteInMatrice(int n, int m, int x, int y)
{
if(x<0 || y<0 || x>=n || y>=m)
return false;
return true;
}
int main()
{
ifstream fin("rj.in");
int n, m;
fin >> n >> m;
Pozitie matrice[n][m];
fin.get();
queue<Coordonate> coada;
for(int i=0; i<n; i++)
{
char linie[m+1];
fin.getline(linie, m+1);
for(int j=0; j<m; j++)
{
if(j >= static_cast<int>(strlen(linie)))
matrice[i][j].continut = 0;
else
switch(linie[j])
{
case ' ':
matrice[i][j].continut = 0;
break;
case 'X':
matrice[i][j].continut = -1;
break;
case 'R':
matrice[i][j].continut = 1;
matrice[i][j].distanta = 1;
coada.push({i, j});
break;
case 'J':
matrice[i][j].continut = 2;
matrice[i][j].distanta = 1;
coada.push({i, j});
break;
}
}
}
ofstream fout("rj.out");
while(!coada.empty())
{
Coordonate t = coada.front();
for(int i=-1; i<=1; i++)
for(int j=-1; j<=1; j++)
if(esteInMatrice(n, m, t.x+i, t.y+j))
{
if(matrice[t.x+i][t.y+j].continut + matrice[t.x][t.y].continut == 3)
{
fout << matrice[t.x][t.y].distanta+1 << ' ' << t.x+i+1 << ' ' << t.y+j+1;
return 0;
}
if(!matrice[t.x+i][t.y+j].continut)
{
coada.push({t.x+i, t.y+j});
matrice[t.x+i][t.y+j].continut = matrice[t.x][t.y].continut;
matrice[t.x+i][t.y+j].distanta = matrice[t.x][t.y].distanta+1;
}
}
coada.pop();
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
cout << matrice[i][j].continut << ' ';
cout << '\n';
}
return 0;
}