Pagini recente » Cod sursa (job #2914424) | Cod sursa (job #2777976) | Cod sursa (job #3262583) | Cod sursa (job #1722539) | Cod sursa (job #2335245)
#include <iostream>
#include <fstream>
#include <queue>
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 mapJ[100][100],startxJ,startyJ;
int mapR[100][100],startxR,startyR,n,m;
queue < pair <int,int> > coada;
void citire()
{
f>>n>>m;
f.get();
char linie[100];
for (int i=1; i<=n; i++)
{
int k=0;
f.getline(linie,256);
for (int j=0; j<=m-1; j++)
{
if(linie[j]=='R')
{
startxR=i;
startyR=j+1;
}
else if (linie[j]=='J')
{
startxJ=i;
startyJ=j+1;
}
else if (linie[j]=='X')
{
mapR[i][j+1]=-1;
mapJ[i][j+1]=-1;
}
}
}
}
bool ok(int i, int j)
{
if (i<1|| j<1|| i>n || j>m)
return false;
if (mapJ[i][j]==-1)
return false;
return true;
}
void lee (int Map[100][100],int startx,int starty)
{
int i,i1,j,j1,d;
Map[startx][starty]=1;
coada.push(make_pair(startx,starty));
while (!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for (d=0; d<8; d++)
{
i1=i+di[d];
j1=j+dj[d];
if (ok(i1,j1)&& Map[i1][j1]<1)
{
Map[i1][j1]=Map[i][j]+1;
coada.push(make_pair(i1,j1));
}
}
}
}
void show (int mat[100][100])
{
int i,j;
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
g<<mat[i][j]<<" ";
g<<'\n';
}
}
int main()
{
int i,j;
citire();
lee(mapJ,startxJ,startyJ);
lee(mapR,startxR,startyR);
int k=10000000,ik,jk;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (mapJ[i][j] == mapR[i][j] && mapJ[i][j]<=k && mapJ[i][j]>0 )
{
k=mapJ[i][j];
ik=i;
jk=j;
}
g<<k<<" "<<ik<<" "<<jk;
}