Cod sursa(job #2054972)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 2 noiembrie 2017 18:24:52
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <stdio.h>
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,min,ct;
    char c;
    FILE *in=fopen("rj.in","r");
    FILE *out=fopen("rj.out","w");
    fscanf(in,"%d%d",&n,&m);
    fgetc(in);
    for(i=1; i<=n; i++)
    {
        ct=1;
        for(j=1; j<=m; j++)
        {
            if(ct) c=fgetc(in);
            if(c=='\n') ct=0;
            if(c=='R')
                x1=i,y1=j;
            if(c=='J')
                x2=i,y2=j;
            if(c=='X')
                lee[i][j]=f[i][j]=-1;
        }
        if(ct)
            fgetc(in);
    }
    for(i=0; i<=n+1; i++)
        lee[i][0]=lee[i][m+1]=f[i][0]=f[i][m+1]=-1;
    for(i=0; i<=m+1; i++)
        lee[0][i]=lee[n+1][i]=f[0][i]=f[n+1][i]=-1;
    p=u=1;
    cx[1]=x1;
    cy[1]=y1;
    f[x1][y1]=1;
    while(p<=u)
    {
        for(i=0; i<8; i++)
            if(f[cx[p]+dx[i]][cy[p]+dy[i]]==0)
                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++;
    }
    p=u=1;
    cx[1]=x2;
    cy[1]=y2;
    lee[x2][y2]=1;
    cmin=lmin=200;
    min=500;
    while(p<=u)
    {
        for(i=0; i<8; i++)
            if(lee[cx[p]+dx[i]][cy[p]+dy[i]]==0)
                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;
        p++;
    }
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(f[i][j]==lee[i][j] && f[i][j]<min && f[i][j]>0)
            {
                min=f[i][j];
                lmin=i;
                cmin=j;
            }
    fprintf(out,"%d %d %d",min,lmin,cmin);
    fclose(in);
    fclose(out);

    return 0;
}