Pagini recente » Cod sursa (job #913812) | Cod sursa (job #2299110) | Cod sursa (job #1194628) | Cod sursa (job #2548044) | Cod sursa (job #2770145)
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ofstream fout("rj.out");
queue <pair<int, int> >Q;
int n, m, a[105][105], b[105][105];
int xr, yr, xj, yj, xfinal, yfinal;
int dx[]={-1, -1, -1, 0, 1, 1, 1, 0};
int dy[]={-1, 0, 1, 1, 1, 0, -1, -1};
char c, cit[305];
void citire()
{
FILE *f=fopen("rj.in", "r");
fscanf(f, "%d %d\n", &n, &m);
for(int i=1; i<=n; i++)
{
fgets(cit+1, 305, f);
for(int j=1; j<=m; j++)
{
if(cit[j]==' ')
a[i][j]=0;
else if(cit[j]=='X')
a[i][j]=-1;
else if(cit[j]=='R')
{
xr=i;
yr=j;
a[i][j]=0;
}
else if(cit[j]=='J')
{
xj=i;
yj=j;
a[i][j]=0;
}
}
}
/**for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
fout<<a[i][j]<<" ";
fout<<"\n";
}**/
for(int i=0; i<=n+1; i++)
{
a[i][0]=-1;
a[i][m+1]=-1;
}
for(int j=0; j<=m+1; j++)
{
a[0][j]=-1;
a[n+1][j]=-1;
}
for(int i=0; i<=n+1; i++)
for(int j=0; j<=m+1; j++)
b[i][j]=a[i][j];
}
void lee(int xi, int yi, int x[105][105])
{
Q.push({xi, yi});
x[xi][yi]=1;
while(!Q.empty())
{
int i=Q.front().first, j=Q.front().second;
Q.pop();
for(int v=0; v<8; v++)
{
int ifinal=i+dx[v];
int jfinal=j+dy[v];
if(x[ifinal][jfinal]==0)
{
x[ifinal][jfinal]=x[i][j]+1;
Q.push({ifinal, jfinal});
}
}
}
}
void verif()
{
int tmin=n*m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
if(a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<tmin)
{
tmin=a[i][j];
xfinal=i;
yfinal=j;
}
fout<<tmin<<" "<<xfinal<<" "<<yfinal;
}
int main()
{
citire();
lee(xj, yj, a);
/**for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
fout<<a[i][j]<<" ";
fout<<"\n";
}**/
lee(xr, yr, b);
verif();
return 0;
}