Pagini recente » Cod sursa (job #2550713) | Cod sursa (job #2215510) | Cod sursa (job #1252538) | Cod sursa (job #2388936) | Cod sursa (job #401862)
Cod sursa(job #401862)
#include <stdio.h>
#include <string.h>
FILE *f=fopen ("rj.in", "r");
FILE *g=fopen ("rj.out", "w");
int i,n,m,ri,rj,vi,vj,j,d=-999;
char a[120];
int r[101][101],v[101][101];
struct coada ( int x,y; };
void citire (void) {
int j;
fscanf (f, "%d%d", &n, &m);
for (i=1;i<=n;i++)
{
fscanf (f, "%s", &a);
for (j=0;j<=strlen(a)-1;j++)
{
if ( a[j]=='R')
{
r[i][j+1]=1;
ri=i; rj=j+1;
}
if ( a[j]=='J')
{
v[i][j+1]=1;
vi=i; vj=j+1;
}
if ( a[j]=='X')
v[i][j+1]=d;
}
}
}
int valid (int K, int v[101][101])
{
if (K==1)
if ( (c[pr].x-1>0 && c[pr].y-1>0)
&& ( v[c[pr].x-1][c[pr].y-1] < v[c[pr].x][c[pr].y]+1 ) )
return 1;
if (K==2)
if ( (c[pr].x-1>0 && c[pr].y+1<=m)
&& ( v[c[pr].x-1][c[pr].y+1] < v[c[pr].x][c[pr].y]+1 ) )
return 1;
if (K==3)
if ( (c[pr].x+1<=n && c[pr].y-1>0)
&& ( v[c[pr].x+1][c[pr].y-1] < v[c[pr].x][c[pr].y]+1 ) )
return 1;
if (K==4)
if ( (c[pr].x+1<=n && c[pr].y+1<=m)
&& ( v[c[pr].x+1][c[pr].y+1] < v[c[pr].x][c[pr].y]+1 ) )
return 1;
if (K==5)
if ( c[pr].x-1>0
&& ( v[c[pr].x-1][c[pr].y] < v[c[pr].x][c[pr].y]+1 ) )
return 1;
if (K==6)
if ( c[pr].x+1<=n
&& ( v[c[pr].x+1][c[pr].y] < v[c[pr].x][c[pr].y]+1 ) )
return 1;
if (K==7)
if ( c[pr].y-1>0
&& ( v[c[pr].x][c[pr].y-1] < v[c[pr].x][c[pr].y]+1 ) )
return 1;
if (K==8)
if ( c[pr].y+1<=m
&& ( v[c[pr].x][c[pr].y+1] < v[c[pr].x][c[pr].y]+1 ) )
return 1;
return 0;
}
void Lee (int pi, int pj, int v[101][101]) {
int pr=1,ult=1,a,b;
coada c[101*101];
c[pr].x=pi; c[pr].y=pj;
while (pr<=ult)
{
a=c[pr].x-1; b=c[pr].y-1;
if ( valid (1, v, a ,b) )
{
ult++; c[ult].x=c[pr].x-1; c[ult].y=c[pr].y-1;
v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
}
if ( valid (2, v) )
{
ult++; c[ult].x=c[pr].x-1; c[ult].y=c[pr].y+1;
v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
}
if ( valid (3, v) )
{
ult++; c[ult].x=c[pr].x+1; c[ult].y=c[pr].y-1;
v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
}
if ( valid (4, v) )
{
ult++; c[ult].x=c[pr].x+1; c[ult].y=c[pr].y+1;
v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
}
if ( valid (5, v) )
{
ult++; c[ult].x=c[pr].x-1; c[ult].y=c[pr].y;
v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
}
if ( valid (6, v, c) )
{
ult++; c[ult].x=c[pr].x+1; c[ult].y=c[pr].y;
v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
}
if ( valid (7, v) )
{
ult++; c[ult].x=c[pr].x; c[ult].y=c[pr].y-1;
v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
}
if ( valid (8, v) )
{
ult++; c[ult].x=c[pr].x; c[ult].y=c[pr].y+1;
v[c[ult].x][c[ult].y] = v[c[pr].x][c[pr].y]+1;
}
pr++;
}
}
int main() {
citire();
Lee(ri, rj, r);
Lee(vi, vj, v);
return 0;
}