Pagini recente » Cod sursa (job #1784966) | Autentificare | Cod sursa (job #1606403) | Cod sursa (job #433718) | Cod sursa (job #2004579)
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
queue < pair < int, int > > coada;
int n,m,v[105][105],k,di[8]={0,0,1,-1,1,1,-1,-1},dj[8]={1,-1,0,0,1,-1,1,-1};
int startij,startjj,startir,startjr;
char x[105][105];
void citire()
{
int i,j;
in >> n >> m;
for(i=0; i<=n; i++)
{
gets(x[i]);
for(j=0; j<m; j++)
{
k=x[i][j];
if(k==74)
{
v[i][j+1]=1;
startij=i;
startjj=j+1;
}
else if(k==82)
{
v[i][j+1]=1;
startir=i;
startjr=j+1;
}
else if(k==88)
{
v[i][j+1]=-1;
}
}
}
}
bool ok(int i, int j)
{
if(i<1 || i>n || j<1 || j>m)
return false;
if(v[i][j]==-1)
return false;
if(v[i][j]==0)
return true;
return false;
}
void lee()
{
int i,j,i_urmator,j_urmator;
coada.push(make_pair(startij,startjj));
coada.push(make_pair(startir,startjr));
while(!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(int directie=0; directie<8; directie++)
{
i_urmator=i+di[directie];
j_urmator=j+dj[directie];
if(v[i_urmator][j_urmator]==v[i][j]+1)
{
out << v[i_urmator][j_urmator] << " " << i_urmator << " " << j_urmator;
return;
}
if(ok(i_urmator,j_urmator))
{
v[i_urmator][j_urmator]=v[i][j]+1;
coada.push(make_pair(i_urmator,j_urmator));
}
}
}
}
int main()
{
citire();
lee();
return 0;
}