Pagini recente » Cod sursa (job #1216843) | Cod sursa (job #2255751) | Cod sursa (job #2345540) | Cod sursa (job #1138868) | Cod sursa (job #1247543)
#include <stdio.h>
using namespace std;
typedef struct{int x,y;}COADA;
int a[102][102]; int b[102][102];
int dx[]={-1,-1,-1,0,0,1,1,1}; // deplasarea pe linii
int dy[]={-1,0,1,-1,1,-1,0,1}; // deplasarea pe coloane
int min=100000;
int main()
{
// citirea si scrierea in fisiere
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");
int n,m,i,j,ur=0,uj=0,pr=1,pj=1,xv,yv,x,y;
char crj;
COADA r[10001],jul[10001];
fscanf (f,"%d",&n); fscanf (f,"%d",&m);
for (i=1;i<=n;++i)
{
fscanf (f,"%c",&crj); // caracterul "endline" b-)
for (j=1;j<=m;++j)
{
fscanf (f,"%c",&crj);
if (crj=='R')
{
a[i][j]=1;
b[i][j]=-1;
r[++ur].x=i; r[ur].y=j;
}
if (crj=='J')
{
a[i][j]=-2;
b[i][j]=1;
jul[++uj].x=i; jul[uj].y=j;
}
if (crj==' ')
a[i][j]=b[i][j]=0;
if (crj=='X')
a[i][j]=b[i][j]=-1;
}
}
while (pr<=ur)
{
x=r[pr].x; y=r[pr++].y;
for (i=0;i<=7;++i)
{
xv=x+dx[i];
yv=y+dy[i];
if( a[xv][yv]==0 && xv!=0 && xv!=n+1 && yv!=0 && yv!=m+1 ) // daca nu iese din matrice
{
a[xv][yv]=a[x][y]+1;
r[++ur].x=xv; r[ur].y=yv;
}
}
}
a[jul[ur].x][jul[ur].y]=1;
while (pj<=uj)
{
x=jul[pj].x; y=jul[pj++].y;
for (i=0;i<=7;++i)
{
xv=x+dx[i];
yv=y+dy[i];
if ( b[xv][yv]==0 && xv!=0 && xv!=n+1 && yv!=0 && yv!=m+1 ) // daca nu iese din matrice
{
b[xv][yv]=b[x][y]+1;
jul[++uj].x=xv; jul[uj].y=yv;
}
}
}
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
if (a[i][j]<min && a[i][j]==b[i][j] && a[i][j]>1)
{
min=a[i][j];
x=i;
y=j;
}
fprintf (g,"%d"" ""%d"" ""%d",min,x,y+1);
return 0;
}