Pagini recente » Cod sursa (job #1781830) | Cod sursa (job #2074325) | Cod sursa (job #2414849) | Cod sursa (job #1255147) | Cod sursa (job #2149668)
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
#include <cmath>
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==1 && matrice[t.x][t.y].continut == 2 && abs(matrice[t.x+i][t.y+j].distanta-matrice[t.x][t.y].distanta) == 1)
{
if(matrice[t.x+i][t.y+j].distanta > matrice[t.x][t.y].distanta)
fout << matrice[t.x][t.y].distanta+1 << ' ' << t.x+i+1 << ' ' << t.y+j+1;
else
fout << matrice[t.x+i][t.y+i].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();
}
return 0;
}