Pagini recente » Cod sursa (job #1548133) | Istoria paginii runda/vs11_12_smileagain/clasament | Cod sursa (job #1547170) | Cod sursa (job #1689528) | Cod sursa (job #1369830)
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
struct poz
{
int x,y;
};
queue <poz> q;
int n,m;
poz auxr, auxj;
char v[110];
int ra[105][105], ja[105][105];
int ox[]={ 1, 0,-1, 0, 1,-1, 1,-1};
int oy[]={ 0, 1, 0,-1,-1, 1, 1,-1};
void citire ()
{
int i,j;
for(i=1; i<=n; i++)
{
gets(v);
for(j=0;j<strlen(v); j++)
{
if( v[j]== 'X') ra[i][j+1]=ja[i][j+1]=-1;
if( v[j] == 'R')
{
ra[i][j+1]=1;
auxr.x=i;
auxr.y=j+1;
}
if(v[j] == 'J')
{
ja[i][j+1]=1;
auxj.x=i;
auxj.y=j+1;
}
}
}
}
void bordare ()
{
int i,j;
for(i=0; i<=n+1;i++)
ra[i][0]=ra[i][m+1]=ja[i][0]=ja[i][m+1]=-1;
for(j=0; j<=m+1; j++)
ra[0][j]=ra[n+1][j]=ja[0][j]=ja[n+1][j]=-1;
}
void leeR()
{
q.push(auxr);
int k;
while(!q.empty())
{
for(k=0;k<8; k++)
{
auxr.x=q.front().x+ox[k];
auxr.y=q.front().y+oy[k];
if(ra[auxr.x][auxr.y] == 0)
{
ra[auxr.x][auxr.y]=ra[q.front().x][q.front().y]+1;
q.push(auxr);
}
}
q.pop();
}
}
void leeJ()
{
q.push(auxj);
int k;
while(!q.empty())
{
for(k=0;k<8; k++)
{
auxj.x=q.front().x+ox[k];
auxj.y=q.front().y+oy[k];
if(!ja[auxj.x][auxj.y])
{
ja[auxj.x][auxj.y]=ja[q.front().x][q.front().y]+1;
q.push(auxj);
}
}
q.pop();
}
}
void afisareR()
{
int i,j;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
if(ra[i][j]==-1 || ra[i][j]>9)
printf(" %d", ra[i][j]);
else
printf(" %d", ra[i][j]);
printf("\n");
}
}
void afisareJ()
{
int i,j;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
if(ja[i][j]==-1 || ja[i][j]>9)
printf(" %d", ja[i][j]);
else
printf(" %d", ja[i][j]);
printf("\n");
}
}
int main()
{
freopen("rj.in", "r", stdin);
freopen("rj.out", "w", stdout);
int i,j,nmin=11025, mini=-1,minj=-1;
scanf("%d%d\n", &n, &m);
citire();
bordare();
leeJ();
leeR();
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
if(ra[i][j]== ja[i][j] && ra[i][j]> 0)
{
if(ra[i][j]< nmin)
{
nmin=ra[i][j];
mini=i;
minj=j;
}
}
printf("%d %d %d\n", nmin, mini, minj);
return 0;
}