Pagini recente » Borderou de evaluare (job #19998) | Borderou de evaluare (job #19993) | Borderou de evaluare (job #2129076) | Cod sursa (job #2501594) | Cod sursa (job #2501585)
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
int m, n;
char a[110][110];
int b[110][110];
struct coord
{
int x;
int y;
};
coord elementMachen(int x, int y)
{
coord aux;
aux.x = x;
aux.y = y;
return aux;
}
queue<coord> qr, qj;
int main()
{
ifstream fin ("rj.in" );
ofstream fout("rj.out");
short int di[8]= {-1, 0, 1, -1, 1, -1, 0, 1};
short int dj[8]= {-1, -1, -1, 0, 0, 1, 1, 1};
int kr, kj;
bool gatabos = false;
fin >> n >> m;
fin.get();
for(int i=0; i<n; i++)
fin.getline(a[i], 111);
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
if(a[i][j] == 'X')
b[i][j] = -10;
if(a[i][j] == ' ')
b[i][j] = 0;
if(a[i][j] == 'R')
{
b[i][j] = 1;
qr.push(elementMachen(i, j));
}
if(a[i][j] == 'J')
{
b[i][j] = 1;
qj.push(elementMachen(i, j));
}
}
while((!qr.empty() || !qj.empty()) && !gatabos)
{
int xc = qr.front().x;
int yc = qr.front().y;
qr.pop();
kr = b[xc][yc];
for(int l=0; l<8; l++)
if(0<=xc+di[l] && xc+di[l]<n && 0<=yc+dj[l] && yc+dj[l]<m && b[xc+di[l]][yc+dj[l]]==0)
{
b[xc+di[l]][yc+dj[l]] = kr+1;
qr.push(elementMachen(xc+di[l], yc+dj[l]));
}
xc = qj.front().x;
yc = qj.front().y;
qj.pop();
kj = b[xc][yc];
for(int l=0; l<8; l++)
if(0<=xc+di[l] && xc+di[l]<n && 0<=yc+dj[l] && yc+dj[l]<m && b[xc+di[l]][yc+dj[l]]>=0)
{
if(b[xc+di[l]][yc+dj[l]]==0)
{
b[xc+di[l]][yc+dj[l]] = kr+1;
qj.push(elementMachen(xc+di[l], yc+dj[l]));
}
else
{
if(b[xc+di[l]][yc+dj[l]]==(kj+1));
{
fout << xc+di[l]-1 << " " << yc+dj[l]+1 << " " << kj;
gatabos = true;
break;
}
}
}
}
/*cout << "\n\n\n";
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
cout << b[i][j] << " ";
cout << "\n";
}*/
return 0;
}