Cod sursa(job #343505)

Utilizator MKLOLDragos Ristache MKLOL Data 26 august 2009 00:52:10
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include<stdio.h>
struct lee{
    char x,y,c;
}v[101*101];
int n,m,min=102*102,r[101][101],J[101][101],o=0,st,dr,Sy,Sx,z,x;
char car;
char dx[9]={0,1,-1,0,0,1,-1,1,-1};
char dy[9]={0,0,0,1,-1,1,-1,-1,1};

int verf(int www,int q,int e)
{
if(q<1||q>n)
return 0;
if(e<1||e>m)
return 0;
if(www==1)
{
if(r[q][e]!=0)
return 0;
}
if(www==2)
{
if(J[q][e]!=0)
return 0;
}
return 1;

}

void citeste()
{
scanf("%d%d",&n,&m);
z=n;
x=m;

for(int i=1;i<=n;++i)
    {
        scanf("%c",&car);
    for(int j=1;j<=m;++j)
        {
        scanf("%c",&car);
        if(car=='X')
        {
            r[i][j]=-1;
            J[i][j]=-1;
        }
        if(car=='R')
        {
        v[o].x=i;
        v[o].y=j;
        v[o].c=1;
        ++o;
        r[i][j]=1;
        }
        if(car=='J')
        {
        J[i][j]=1;
        v[o].x=i;
        v[o].y=j;
        v[o].c=2;
        ++o;
        }
        }
}
}
void afi()
{
/*for(int i=1;i<=n;++i)
    {for(int j=1;j<=m;++j)
        printf("%d ",r[i][j]);
    printf("\n");
    }
    printf("\n\n");
for(int i=1;i<=n;++i)
    {for(int j=1;j<=m;++j)
        printf("%d ",J[i][j]);
    printf("\n");
    }*/
printf("%d %d %d",r[Sx][Sy],Sx,Sy);
}
void rezolva(int k,int a,int b)
{
    for(int i=1;i<=8;++i)
    {
    if(verf(v[k].c,a+dx[i],b+dy[i]))
    {
        v[dr].x=a+dx[i];
        v[dr].y=b+dy[i];
        v[dr].c=v[k].c;
        if(v[k].c==1)
        {
        r[v[dr].x][v[dr].y]=r[a][b]+1;
        }

        if(v[k].c==2)
        {
        J[v[dr].x][v[dr].y]=J[a][b]+1;


        }
        if(r[v[dr].x][v[dr].y]!=-1&&r[v[dr].x][v[dr].y]==J[v[dr].x][v[dr].y]&&min>=r[v[dr].x][v[dr].y])
        {
        if(min>r[v[dr].x][v[dr].y])
        min=r[v[dr].x][v[dr].y];
        if(v[dr].x<Sx||Sx==0&&r[v[dr].x][v[dr].y]==min)
        {
        Sx=v[dr].x;
        Sy=v[dr].y;
        }
        }

        if(r[v[dr].x][v[dr].y]>min)
        st=n*n;
        ++dr;


    }

    }

}




int main()
{

freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
citeste();
dr=3;
for(st=0;st<dr;++st)
{rezolva(st,v[st].x,v[st].y);
}
afi();


}