Pagini recente » Cod sursa (job #2170058) | Cod sursa (job #2164092) | Cod sursa (job #1362277) | Cod sursa (job #930024) | Cod sursa (job #1884135)
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,sti,stj,spi,spj;
int dl[8]= {-1,1,1,-1,0,1,0,-1};
int dc[8]= {1,1,-1,-1,1,0,-1,0};
char v[105][105];
int x[105][105];
int z[105][105];
void bordare(int o[105][105])
{
for(int i=0;i<=n+1;i++)
{
o[i][0]=-1;
o[i][m+1]=-1;
}
for (int i=0;i<=m+1;i++)
{
o[0][i]=-1;
o[n+1][i]=-1;
}
}
void filling(int o[105][105],int p[105][105])
{
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
{
if (v[i][j]=='X')
{
x[i][j]=-1;
z[i][j]=-1;
}
else if (v[i][j]==' ')
{
x[i][j]=0;
z[i][j]=0;
}
else if (v[i][j]=='R')
{x[i][j]=1;
sti=i;
stj=j;}
else if (v[i][j]=='J')
{z[i][j]=1;
spi=i;
spj=j;}
}
}
void lee(int o[105][105],int i,int j)
{
queue < pair < int , int > > coada;
coada.push(make_pair(i,j));
while (!coada.empty())
{
int w=coada.front().first;
int s=coada.front().second;
coada.pop();
for (int k=0;k<8;k++)
{
if (o[w+dl[k]][s+dc[k]]==0)
{
o[w+dl[k]][s+dc[k]]=o[w][s]+1;
coada.push(make_pair(w+dl[k],s+dc[k]));
}
}
}
}
int main()
{
int i,j;
f>>n>>m;
for (i=0;i<=n;i++)
f.getline(1+v[i],m+1);
bordare(x);
bordare(z);
filling(x,z);
lee(x,sti,stj);
lee(z,spi,spj);
int minim=101;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
if (x[i][j]==z[i][j]&&x[i][j]<minim&&x[i][j]>0)
{
minim=x[i][j];
sti=i;
stj=j;
}
}
g<<minim<<' '<<sti<<' '<<stj;
return 0;
}