Pagini recente » Cod sursa (job #3168216) | Cod sursa (job #628528) | Cod sursa (job #2770541) | Cod sursa (job #239990) | Cod sursa (job #2338766)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ofstream fo("rj.out");
ifstream fi("rj.in");
struct punct
{
int x,y;
};
int n,m,lee[110][110];
bool viz[110][110];
char Cine[110][110];
int dirI[8]= {0, 0, 1, 1,-1,-1, 1,-1};
int dirJ[8]= {1,-1, 1,-1,-1, 1, 0, 0};
int lin,col,timp;
queue<punct> coada;
string a;
bool inside(int x,int y)
{
if(x<1 || x>n)
return false;
if(y<1 || y>m)
return false;
return true;
}
int main()
{
fi>>n>>m;
fi.get();
for(int i=1; i<=n; i++)
{
getline(fi,a);
a=" "+a;
for(int j=1; j<a.size(); j++)
{
if(a[j]=='J')
{
punct baga;
baga.x=i;
baga.y=j;
coada.push(baga);
viz[i][j]=true;
Cine[i][j]='J';
lee[i][j]=1;
}
if(a[j]=='R' )
{
punct baga;
baga.x=i;
baga.y=j;
coada.push(baga);
viz[i][j]=true;
Cine[i][j]='R';
lee[i][j]=1;
}
if(a[j]==' ')
lee[i][j]=50000;
if(a[j]=='X')
lee[i][j]=-1;
}
for(int rest=a.size();rest<=m;rest++)
lee[i][rest]=50000;
}
while(coada.empty()==false)
{
int curentX=coada.front().x;
int curentY=coada.front().y;
coada.pop();
for(int i=0; i<=7; i++)
{
punct vecin;
vecin.x=curentX+dirI[i];
vecin.y=curentY+dirJ[i];
if(inside(vecin.x,vecin.y) && lee[vecin.x][vecin.y]!=-1 )
{
if(viz[vecin.x][vecin.y]==false)
{
coada.push(vecin);
lee[vecin.x][vecin.y]=lee[curentX][curentY]+1;
viz[vecin.x][vecin.y]=true;
Cine[vecin.x][vecin.y]=Cine[curentX][curentY];
}
else if(Cine[vecin.x][vecin.y]!=Cine[curentX][curentY])
{
if(lee[curentX][curentY]+1==lee[vecin.x][vecin.y])
{
fo<<lee[vecin.x][vecin.y]<<" "<<vecin.x<<" "<<vecin.y;
}
}
}
}
}
fi.close();
fo.close();
return 0;
}