Pagini recente » Cod sursa (job #3196996) | Cod sursa (job #2561577) | Cod sursa (job #2268715) | Cod sursa (job #2731754) | Cod sursa (job #257479)
Cod sursa(job #257479)
//rj
#include <stdio.h>
#define N 110
#define M 110
int n,m;
char c;
int v1[N][M],v2[N][M];
int R[2],J[2];
int dx[]={0,0,-1,1,-1,1,-1,1};
int dy[]={-1,1,0,0,-1,1,1,-1};
int c1,c2;
void citire()
{
int i,j;
scanf("%d%d\n",&n, &m);
for(i=1;i<=n;++i)
{
for(j=1;j<=m;++j)
{
scanf("%c",&c);
if(c=='R')
{
R[0]=i;
R[1]=j;
v1[i][j]=1;
}
if(c=='J')
{
J[0]=i;
J[1]=j;
v1[i][j]=1;
}
if(c=='X')
v1[i][j]=-1;
}
scanf("%c",&c);
}
}
void bord()
{
for(int i=0;i<=n+1;++i)
{
v1[i][0]=v1[i][n+1]=-1;
}
for(int i=0;i<=m+1;++i)
{
v1[0][i]=v1[m+1][i]=-1;
}
}
void bfs1()
{
int i,q[N*M][2];
int x[2],y[2];
int p=0,u=0;
q[u][0]=R[0];
q[u][1]=R[1];
u++;
while(p<=u)
{
x[0]=q[p][0];
x[1]=q[p][1];
p++;
for(i=0;i<8;++i)
{
y[0]=x[0]+dx[i];
y[1]=x[1]+dy[i];
if(v1[y[0]][y[1]]==0)
{
u++;
q[u][0]=y[0];
q[u][1]=y[1];
v1[y[0]][y[1]]= 1 + v1[x[0]][x[1]];
}
}
}
}
void bfs2()
{
int i,q[N*M][2];
int x[2],y[2];
int p=0,u=0;
q[u][0]=J[0];
q[u][1]=J[1];
u++;
while(p<=u)
{
x[0]=q[p][0];
x[1]=q[p][1];
p++;
for(i=0;i<8;++i)
{
y[0]=x[0]+dx[i];
y[1]=x[1]+dy[i];
if(v2[y[0]][y[1]]==0)
{
u++;
q[u][0]=y[0];
q[u][1]=y[1];
v2[y[0]][y[1]]= 1 + v2[x[0]][x[1]];
}
}
}
}
void vect()
{
for(int i=0;i<=n+1;++i)
{
for(int j=0;j<=m+1;++j)
v2[i][j]=v1[i][j];
}
}
void afisare(int V[N][M])
{
for(int i=0;i<=n+1;++i)
{
for(int j=0;j<=m+1;++j)
printf("%3d",V[i][j]);
printf("\n");
}
}
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
citire();
bord();
vect();
bfs1();
//bfs2();
afisare(v1);
printf("\n");
afisare(v2);
return 0;
}