Pagini recente » Cod sursa (job #1833645) | Cod sursa (job #775061) | Cod sursa (job #1921718) | Cod sursa (job #1575912) | Cod sursa (job #2208006)
#include <fstream>
#include <queue>
using namespace std;
int cs[8] = {-1, 1, 0, 0, 1, 1, -1, -1};
int cd[8] = {0, 0, 1, -1, -1, 1, -1, 1};
int rj[104][104];
int n, m;
void Lee(pair<int, int> r, int d[][104])
{
queue < pair <int, int> > C;
pair<int, int> t;
C.push(r);
d[r.first][r.second]=1;
int i;
while(!C.empty())
{
t=C.front();
for(i=0;i<=7;i++)
if(d[t.first+cs[i]][t.second+cd[i]]==0 && rj[t.first+cs[i]][t.second+cd[i]]!=-1 && (t.first+cs[i]>=1 && t.first+cs[i]<=n) &&(t.second+cd[i]>=1 && t.second+cd[i]<=m))
{
d[t.first+cs[i]][t.second+cd[i]]=d[t.first][t.second]+1;
C.push(pair<int,int>(t.first+cs[i],t.second+cd[i]));
}
C.pop();
}
}
int main()
{
int i,k;
pair <int, int> r,j;
ifstream fin("rj.in");
ofstream out("rj.out");
fin >> n >> m;
char p[m+1];
fin.get();
for (i=1; i<=n; i++)
{
fin.getline(p,m+1);
for(k=1; k<=m; k++)
{
if (p[k-1]=='R')
{
r.first=i;
r.second=k;
}
else if (p[k-1]=='J')
{
j.first=i;
j.second=k;
}
else if (p[k-1]=='X')
rj[i][k]=-1;
}
}
int ro[104][104], jul[104][104];
for (i=1;i<=n;i++)
for (k=1;k<=m;k++)
{
ro[i][k]=0;
jul[i][k]=0;
}
Lee(r, ro);
Lee(j, jul);
r.second=102;
int tmin=102;
for (i=1;i<=n;i++)
for(k=1;k<=m;k++)
if (ro[i][k]==jul[i][k] && ro[i][k]<tmin && ro[i][k]!=0)
{
r.first=i;
r.second=k;
tmin=ro[i][k];
}
out<< tmin << " " << r.first << " " << r.second;
return 0;
}