Pagini recente » Cod sursa (job #924182) | Cod sursa (job #1890716) | Cod sursa (job #3168613) | Cod sursa (job #1466742) | Cod sursa (job #2151610)
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream cout("rj.out");
char mat[110][110];
int viz[110][110];
int lung[110][110];
pair<int, int> tata[110][110];
int main()
{
int n, m, i, j;
fin>>n>>m;
fin.get();
queue< pair<int, int> > coada;
for(i=1;i<=n;i++)
fin.getline(mat[i]+1, m+1);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(mat[i][j]=='R'){
pair<int, int> pereche(i, j);
coada.push(pereche);
viz[coada.front().first][coada.front().second]=1;
}
while(!coada.empty()){
pair<int, int> nod=coada.front();
int i=nod.first, j=nod.second;
lung[i][j]++;
if(mat[i][j]=='J'){
int l=(lung[i][j]+1)/2;
cout<<l<<" ";
pair<int, int>x(i,j);
for(int k=1;k<l;k++)
x=tata[x.first][x.second];
cout<<x.first<<" "<<x.second;
break;
}
if(mat[i-1][j-1]!=0 && mat[i-1][j-1]!='X' && viz[i-1][j-1]==0){
pair <int, int> x(i-1, j-1);
viz[i-1][j-1]=1;
lung[i-1][j-1]+=lung[i][j];
coada.push(x);
tata[i-1][j-1]=nod;
}
if(mat[i-1][j]!=0 && mat[i-1][j]!='X' && viz[i-1][j]==0){
pair <int, int> x(i-1, j);
viz[i-1][j]=1;
lung[i-1][j]+=lung[i][j];
coada.push(x);
tata[i-1][j]=nod;
}
if(mat[i-1][j+1]!=0 && mat[i-1][j+1]!='X' && viz[i-1][j+1]==0){
pair <int, int> x(i-1, j+1);
viz[i-1][j+1]=1;
lung[i-1][j+1]+=lung[i][j];
coada.push(x);
tata[i-1][j+1]=nod;
}
if(mat[i][j-1]!=0 && mat[i][j-1]!='X' && viz[i][j-1]==0){
pair <int, int> x(i, j-1);
viz[i][j-1]=1;
lung[i][j-1]+=lung[i][j];
coada.push(x);
tata[i][j-1]=nod;
}
if(mat[i][j+1]!=0 && mat[i][j+1]!='X' && viz[i][j+1]==0){
pair <int, int> x(i, j+1);
viz[i][j+1]=1;
lung[i][j+1]+=lung[i][j];
coada.push(x);
tata[i][j+1]=nod;
}
if(mat[i+1][j-1]!=0 && mat[i+1][j-1]!='X' && viz[i+1][j-1]==0){
pair <int, int> x(i+1, j-1);
viz[i+1][j-1]=1;
lung[i+1][j-1]+=lung[i][j];
coada.push(x);
tata[i+1][j-1]=nod;
}
if(mat[i+1][j]!=0 && mat[i+1][j]!='X' && viz[i+1][j]==0){
pair <int, int> x(i+1, j);
viz[i+1][j]=1;
lung[i+1][j]+=lung[i][j];
coada.push(x);
tata[i+1][j]=nod;
}
if(mat[i+1][j+1]!=0 && mat[i+1][j+1]!='X' && viz[i+1][j+1]==0){
pair <int, int> x(i+1, j+1);
viz[i+1][j+1]=1;
lung[i+1][j+1]+=lung[i][j];
coada.push(x);
tata[i+1][j+1]=nod;
}
coada.pop();
}
return 0;
}