Cod sursa(job #2054403)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 1 noiembrie 2017 22:24:40
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <stdio.h>
#include <stdlib.h>
char a[102][102];
int lee[102][102],f[102][102];
int cx[10001],cy[10001];
int dx[8]={-1,-1,-1,0,+1,+1,+1,0};
int dy[8]={-1,0,+1,+1,+1,0,-1,-1};
int main()
{
    int n,m,i,j,p,u,x1,y1,x2,y2,z,lmin,cmin;
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d%d",&n,&m);
    getchar();
    for(i=1; i<=n; i++)
        for(j=1; j<=m+1; j++)
            a[i][j]=getchar();
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(a[i][j]=='R')
                x1=i,y1=j;
            else
                if(a[i][j]=='J')
                    x2=i,y2=j;
    p=u=1;
    cx[1]=x1;
    cy[1]=y1;
    f[x1][y1]=1;
    a[x2][y2]=' ';
    while(p<=u)
    {
        for(i=0; i<8; i++)
            if(f[cx[p]+dx[i]][cy[p]+dy[i]]==0 && a[cx[p]+dx[i]][cy[p]+dy[i]]==' ')
                u++,cx[u]=cx[p]+dx[i],cy[u]=cy[p]+dy[i],f[cx[u]][cy[u]]=f[cx[p]][cy[p]]+1;
        p++;
    }
    z=(f[x2][y2]+1)/2;
    p=u=1;
    cx[1]=x2;
    cy[1]=y2;
    lee[x2][y2]=1;
    cmin=lmin=200;
    /*for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
            printf("%d ",f[i][j]);
        printf("\n");
    }*/
    while(p<=u)
    {
        for(i=0; i<8; i++)
            if(lee[cx[p]+dx[i]][cy[p]+dy[i]]==0 && a[cx[p]+dx[i]][cy[p]+dy[i]]==' ' && f[cx[p]+dx[i]][cy[p]+dy[i]]==f[cx[p]][cy[p]]-1)
                if(lee[cx[p]][cy[p]]+1<z)
                    u++,cx[u]=cx[p]+dx[i],cy[u]=cy[p]+dy[i],lee[cx[u]][cy[u]]=lee[cx[p]][cy[p]]+1;
                else
                    if(cx[p]+dx[i]<lmin)
                        lmin=cx[p]+dx[i],cmin=cy[p]+dy[i];
                    else
                        if(cx[p]+dx[i]==lmin && cy[p]+dy[i]<cmin)
                            cmin=cy[p]+dy[i];
        p++;
    }
    printf("%d %d %d",z,lmin,cmin);

    return 0;
}