Pagini recente » Cod sursa (job #696250) | Cod sursa (job #179978) | Cod sursa (job #1536567) | Cod sursa (job #488353) | Cod sursa (job #880963)
Cod sursa(job #880963)
#include <cstdio>
#include <queue>
#define N 252
using namespace std;
char map[N][N];
int d[N][N];
int n,m;
const int dlin[] = {1,-1,0,0,1,-1,1,-1};
const int dcol[] = {0,0,1,-1,1,1,-1,-1};
struct elem
{
int lin,col;
} res;
queue <elem> q;
bool accesibil(elem p)
{
if(p.lin>=n) return 0;
if(p.lin<0) return 0;
if(p.col>=m) return 0;
if(p.col<0) return 0;
return 1;
}
void read()
{
char c[102];
elem p;
scanf("%d %d\n",&n,&m);
for(int i=0;i<n;++i)
{
gets(c);
for(int j=0;j<m;++j)
{
if(c[j] == 'X') d[i][j]=-1;
//else if(c[j] == ' ') ;
else if(c[j]== 'R')
{
p.col=j, p.lin=i;
q.push(p);
d[i][j]=1;
map[i][j]=1;
}
else if(c[j]== 'J')
{
p.col=j, p.lin=i;
q.push(p);
d[i][j]=1;
map[i][j]=2;
}
}
}
}
elem run()
{
elem a,b;
while(! q.empty())
{
a=q.front();
q.pop();
for(int i=0;i<8;++i)
{
b.col = a.col+dcol[i];
b.lin = a.lin+dlin[i];
if(accesibil(b) && d[b.lin][b.col]>-1)
{
if(d[b.lin][b.col]==0)
{
q.push(b);
d[b.lin][b.col] = d[a.lin][a.col]+1;
map[b.lin][b.col] = map[a.lin][a.col];
}
else if(map[b.lin][b.col]!=map[a.lin][a.col])
//if(d[b.lin][b.col]>0)
{
//if(d[b.lin][b.col] == d[a.lin][a.col])
// ++d[b.lin][b.col];
return b;
}
}
}
}
}
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
read();
res = run();
/*for(int i=0;i<n;++i)
{
for(int j=0;j<m;++j)
printf("%d ",d[i][j]);
printf("\n");
}*/
printf("%d %d %d",d[res.lin][res.col],1+res.lin,1+res.col);
return 0;
}