Cod sursa(job #432317)

Utilizator edp100Edp100 edp100 Data 2 aprilie 2010 10:03:12
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include<stdio.h>
#include<string.h>

int n,m,d[3][101][101],in,sf;
char viz[101][101],v[101][101];
int smin=1000001;

struct cord
{
    int x,y;
};

cord q[10001],p,p1,p2;

int oyv(int val)
{
    if(val>=1 && val<=m)
        return 1;
    return 0;
}

int oxv(int val)
{
    if(val>=1 && val<=n)
        return 1;
    return 0;
}

void actual (int s1,int s2,int per)
{
    int poz1,poz2;
    poz1=q[in].x;
    poz2=q[in].y;
    if(!v[poz1+s1][poz2+s2] && !viz[poz1+s1][poz2+s2] && oxv(poz1+s1) && oyv(poz2+s2))
    {
        viz[poz1+s1][poz2+s2]=1;
        d[per][poz1+s1][poz2+s2]=d[per][poz1][poz2]+1;
        q[++sf].x=poz1+s1;
        q[sf].y=poz2+s2;
    }
}

int main ()
{
    int i,j;
    char c[105],car;
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d%d\n",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%c",&car);
            if(c[j]==' ')
                v[i][j+1]=1;
            if(c[j]=='R')
            {
                p1.x=i;
                p1.y=j+1;
            }      //if c
            if(c[j]=='J')
            {
                p2.x=i;
                p2.y=j+1;
            }
        }      //for
        scanf("\n");
    }     //for
    q[1].x=p1.x;
    q[1].y=p1.y;
    viz[p1.x][p1.y]=1;
    in=1;sf=1;
    while(in<=sf)
    {
        actual(-1,0,1);
        actual(0,-1,1);
        actual(1,0,1);
        actual(0,1,1);
        in++;
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            viz[i][j]=0;
    q[1].x=p2.x;
    q[1].y=p2.y;
    in=1;sf=1;
    viz[p2.x][p2.y]=1;
    while(in<=sf)
    {
        actual(-1,0,2);
        actual(0,-1,2);
        actual(1,0,2);
        actual(0,1,2);
        in++;
    }
    for(i=1;i<=j;i++)
        for(j=1;j<=m;j++)
            if(d[1][i][j]==d[2][i][j] && d[1][i][j]!=0 && d[2][i][j]<smin)
            {
                smin=d[1][i][j];
                p.x=i;
                p.y=j;
            }
    printf("%d %d %d\n",smin,p.x,p.y);
    return 0;
}