Pagini recente » Cod sursa (job #1396178) | Cod sursa (job #1708161) | Cod sursa (job #2210726) | Cod sursa (job #2076453) | Cod sursa (job #122720)
Cod sursa(job #122720)
#include <stdio.h>
struct gaina
{
int x,y;
};
int d[105][105][2];
gaina cdg[10005];
int n,m,x1,y1,x2,y2,k;
int dl[]={-1,0,1,0,-1,-1,1,1};
int dc[]={0,1,0,-1,1,-1,1,-1};
int main()
{
FILE *in = fopen("rj.in","r");
FILE *out = fopen("rj.out","w");
int x,i,y,j,tmin;
char c;
fscanf(in,"%d%d",&n,&m);
for (j=0; j<2; j++)
for (i=0; i<=n+1; i++)
{
d[i][0][j]=-1;
d[i][m+1][j]=-1;
}
for (j=0; j<2; j++)
for (i=0; i<=m+1; i++)
{
d[0][i][j]=-1;
d[n+1][i][j]=-1;
}
for (i=1; i<=n; i++)
{
fscanf(in,"%c",&c);
for (j=1; j<=m; j++)
{
fscanf(in,"%c",&c);
if (c=='X')
{
d[i][j][0]=-1;
d[i][j][1]=-1;
}
if (c=='R')
{
d[i][j][0]=1;
d[i][j][1]=-1;
x1=i; y1=j;
}
if (c=='J')
{
d[i][j][0]=-1;
d[i][j][1]=1;
x2=i; y2=j;
}
}
}
k=1;
cdg[0].x=x1;
cdg[0].y=y1;
for (i=0; i<k; i++)
for (j=0; j<8; j++)
if(d[cdg[i].x+dl[j]][cdg[i].y+dc[j]][0]==0)
{
cdg[k].x=cdg[i].x+dl[j];
cdg[k].y=cdg[i].y+dc[j];
k++;
d[cdg[i].x+dl[j]][cdg[i].y+dc[j]][0]=d[cdg[i].x][cdg[i].y][0]+1;
}
for (i=0; i<10005; i++)
{
cdg[i].x=0;
cdg[i].y=0;
}
k=1;
cdg[0].x=x2;
cdg[0].y=y2;
for (i=0; i<k; i++)
for (j=0; j<8; j++)
if(d[cdg[i].x+dl[j]][cdg[i].y+dc[j]][1]==0)
{
cdg[k].x=cdg[i].x+dl[j];
cdg[k].y=cdg[i].y+dc[j];
k++;
d[cdg[i].x+dl[j]][cdg[i].y+dc[j]][1]=d[cdg[i].x][cdg[i].y][1]+1;
}
tmin=-1;
x=0;
y=0;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (d[i][j][0]==d[i][j][1] && d[i][j][0]!=-1 && d[i][j][0]!=0)
if (tmin==-1 || tmin>d[i][j][0])
{
tmin=d[i][j][0];
x=i;
y=j;
}
fprintf(out,"%d %d %d\n",tmin,x,y);
fclose(in);
fclose(out);
return 0;
}