Pagini recente » Cod sursa (job #1500463) | Cod sursa (job #1902360) | Cod sursa (job #2773893) | Cod sursa (job #2338297) | Cod sursa (job #1537774)
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int di[8] = {0,0,-1,1,1,1,-1,-1};
int dj[8] = {1,-1,0,0,-1,1,1,-1};
int ro[101][101], ju[101][101];
int n, m,r1,r2,j1,j2;
char c[101];
queue < pair < int, int > > q;
bool ok(int i,int j)
{
if(i < 1 || j < 1 || i > n || j > m)
return false;
else return true;
}
void leer()
{
int i,j,ii,jj;
q.push(make_pair(r1,r2));
while(!q.empty())
{
i = q.front().first;
j = q.front().second;
q.pop();
for(int d = 0; d < 8;d++)
{
ii = i + di[d];
jj = j + dj[d];
if(ok(ii,jj)&&ro[ii][jj]==0)
{
ro[ii][jj] = ro[i][j] + 1;
q.push(make_pair(ii,jj));
}
}
}
}
void leej()
{
int i,j,ii,jj;
q.push(make_pair(j1,j2));
while(!q.empty())
{
i = q.front().first;
j = q.front().second;
q.pop();
for(int d = 0; d < 8;d++)
{
ii = i + di[d];
jj = j + dj[d];
if(ok(ii,jj)&&ju[ii][jj]==0)
{
ju[ii][jj] = ju[i][j] + 1;
q.push(make_pair(ii,jj));
}
}
}
}
void read()
{
f>>n>>m;
for(int i=0; i <= n; i++)
{
f.getline (c,101);
for(int j=0 ;j<= strlen(c); j++)
{
if(c[j]=='X')
{
ro[i][j+1]=1;
ju[i][j+1]=1;
}
else if(c[j]=='J')
{
j1=i;
j2=j+1;
ju[i][j+1]=1;
ro[i][j+1]=0;
}
else if(c[j]=='R')
{
r1=i;
r2=j+1;
ju[i][j+1]=0;
ro[i][j+1]=1;
}
else if(c[j]==' ')
{
ro[i][j+1]=0;
ju[i][j+1]=0;
}
}
}
}
int main()
{
read();
leer();
leej();
int min=200;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
if(ro[i][j]==ju[i][j]&&ro[i][j]<min&&ro[i][j]>1)
{
min=ro[i][j];
r1=i;
r2=j;
}
/*for(int i = 1; i <= n;i++)
{
for(int j = 1; j <= m;j++)
g<<ro[i][j]<<" ";
g<<"\n";
}
g<<"\n";
for(int i = 1; i <= n;i++)
{
for(int j = 1; j <= m;j++)
g<<ju[i][j]<<" ";
g<<"\n";
}*/
g<<min<<" "<<r1<<" "<<r2;
return 0;
}