Pagini recente » Cod sursa (job #2508879) | Cod sursa (job #1564820) | Cod sursa (job #1724455) | soldiers | Cod sursa (job #198318)
Cod sursa(job #198318)
#include <stdio.h>
#include <string.h>
#define NMAX 105
struct punct{
int _x,_y;
};
punct modif[10000];
char c;
char mesaj[200];
int a[NMAX][NMAX],b[NMAX][NMAX],i,j,n,m,rx,ry,jx,jy,min,xf,yf;
void functie1(int x,int y)
{int li,lf;
li=1;lf=1;
modif[1]._x=x;
modif[1]._y=y;
for (i=li;i<=lf;i++)
{x=modif[i]._x;
y=modif[i]._y;
if ((a[x-1][y-1]==0)||(a[x-1][y-1]>i))
{a[x-1][y-1]=i;
lf++;
modif[lf]._x=x-1;
modif[lf]._y=y-1;
}
if ((a[x-1][y+1]==0)||(a[x-1][y+1]>i))
{a[x-1][y+1]=i;
lf++;
modif[lf]._x=x-1;
modif[lf]._y=y+1;
}
if ((a[x+1][y-1]==0)||(a[x+1][y-1]>i))
{a[x+1][y-1]=i;
lf++;
modif[lf]._x=x+1;
modif[lf]._y=y-1;
}
if ((a[x+1][y+1]==0)||(a[x+1][y+1]>i))
{a[x+1][y+1]=i;
lf++;
modif[lf]._x=x+1;
modif[lf]._y=y+1;
}
if ((a[x+1][y]==0)||(a[x+1][y]>i))
{a[x+1][y]=i;
lf++;
modif[lf]._x=x+1;
modif[lf]._y=y;
}
if ((a[x-1][y]==0)||(a[x-1][y]>i))
{a[x-1][y]=i;
lf++;
modif[lf]._x=x-1;
modif[lf]._y=y;
}
if ((a[x][y+1]==0)||(a[x][y+1]>i))
{a[x][y+1]=i;
lf++;
modif[lf]._x=x;
modif[lf]._y=y+1;
}
if ((a[x][y-1]==0)||(a[x][y-1]>i))
{a[x][y-1]=i;
lf++;
modif[lf]._x=x;
modif[lf]._y=y-1;
}
}
}
void functie2(int x,int y)
{int li,lf;
li=1;lf=1;
modif[1]._x=x;
modif[1]._y=y;
for (i=li;i<=lf;i++)
{x=modif[i]._x;
y=modif[i]._y;
if ((b[x-1][y-1]==0)||(b[x-1][y-1]>i))
{b[x-1][y-1]=i;
lf++;
modif[lf]._x=x-1;
modif[lf]._y=y-1;
}
if ((b[x-1][y+1]==0)||(b[x-1][y+1]>i))
{b[x-1][y+1]=i;
lf++;
modif[lf]._x=x-1;
modif[lf]._y=y+1;
}
if ((b[x+1][y-1]==0)||(b[x+1][y-1]>i))
{b[x+1][y-1]=i;
lf++;
modif[lf]._x=x+1;
modif[lf]._y=y-1;
}
if ((b[x+1][y+1]==0)||(b[x+1][y+1]>i))
{b[x+1][y+1]=i;
lf++;
modif[lf]._x=x+1;
modif[lf]._y=y+1;
}
if ((b[x+1][y]==0)||(b[x+1][y]>i))
{b[x+1][y]=i;
lf++;
modif[lf]._x=x+1;
modif[lf]._y=y;
}
if ((b[x-1][y]==0)||(b[x-1][y]>i))
{b[x-1][y]=i;
lf++;
modif[lf]._x=x-1;
modif[lf]._y=y;
}
if ((b[x][y+1]==0)||(b[x][y+1]>i))
{b[x][y+1]=i;
lf++;
modif[lf]._x=x;
modif[lf]._y=y+1;
}
if ((b[x][y-1]==0)||(b[x][y-1]>i))
{b[x][y-1]=i;
lf++;
modif[lf]._x=x;
modif[lf]._y=y-1;
}
}
}
int main()
{FILE *f;
f=fopen("rj.in","r");
fscanf(f,"%d %d\n",&n,&m);
for (i=1;i<=n;i++)
{fgets(mesaj,200,f);
for (j=1;j<=m;j++)
{
if (mesaj[j-1]=='X') {a[i][j]=-1;b[i][j]=-1;}
if (mesaj[j-1]=='R') {rx=i;ry=j;a[i][j]=-2;b[i][j]=0;}
if (mesaj[j-1]=='J') {jx=i;jy=j;a[i][j]=0;b[i][j]=-3;}
if (mesaj[j-1]==' ') {a[i][j]=0;b[i][j]=0;}
}
//fscanf(f,"%c",&c);
}
fclose(f);
for (i=0;i<=m+1;i++) a[0][i]=-1;
for (i=1;i<=n+1;i++) a[i][m+1]=-1;
for (i=0;i<=m;i++) a[n+1][i]=-1;
for (i=1;i<=n;i++) a[i][0]=-1;
for (i=0;i<=m+1;i++) b[0][i]=-1;
for (i=1;i<=n+1;i++) b[i][m+1]=-1;
for (i=0;i<=m;i++) b[n+1][i]=-1;
for (i=1;i<=n;i++) b[i][0]=-1;
functie1(rx,ry);
functie2(jx,jy);
min=0;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (min==0) {if ((a[i][j]==b[i][j])&&(a[i][j]>0))
{min=a[i][j];xf=i;yf=j;}
}
else if ((min>a[i][j])&&(a[i][j]==b[i][j])&&(a[i][j]>0))
{min=a[i][j];xf=i;yf=j;}
f=fopen("rj.out","w");
fprintf(f,"%d %d %d",min+1,xf,yf);
fclose(f);
return 0;
}