Pagini recente » Cod sursa (job #2299304) | Cod sursa (job #1319792) | Cod sursa (job #2691287) | Cod sursa (job #1838611) | Cod sursa (job #1629022)
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
int dx[]={-1,0,1,0,-1,-1,1,1};
int dy[]={0,1,0,-1,-1,1,1,-1};
int n, m, ro[105][105], ju[105][105], rx,ry, jx,jy , xfin,yfin, smin= 10000;
queue < pair <int,int> > c;
pair <int,int> inc, actual, vecin;
char linia[101];
bool ok (int x,int y,int a[][105] )
{
return a[x][y]==0 && x<=n && x>=1 && y<=m && y>=1 ;
}
void lee (int a[][105] )
{
while ( c.size() )
{
actual= c.front();
c.pop();
for(int i=0; i<8; i++)
{
vecin.first= actual.first + dx[i];
vecin.second= actual.second + dy[i];
if ( ok( vecin.first, vecin.second, a ) )
{
a[vecin.first][vecin.second]= a[actual.first][actual.second] + 1;
c.push (vecin);
}
}
}
}
int main()
{
fin>>n>>m;
fin.get();
for(int i=1;i<=n; i++)
{
fin.getline(linia,101);
for(int j=0;j<strlen(linia);j++)
{
if( linia[j]== 'X' ) ro[i][j+1]= ju[i][j+1]= -1;
if( linia[j]== 'R' )
{
ro[i][j+1]= 1;
rx=i;
ry=j+1;
}
if( linia[j]== 'J' )
{
ju[i][j+1]= 1;
jx=i;
jy=j+1;
}
}
}
inc.first= rx;
inc.second= ry;
c.push(inc);
lee(ro);
inc.first= jx;
inc.second= jy;
c.push(inc);
lee(ju);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++)
if ( ro[i][j]==ju[i][j] && ro[i][j]>0 )
if (ro[i][j] <smin)
{ smin= ro[i][j];
xfin=i;
yfin=j;
}
fout<<ro[xfin][yfin]<<" "<<xfin<<" "<<yfin<<" ";
return 0;
}