Cod sursa(job #2024130)

Utilizator armigheGheorghe Liviu Armand armighe Data 19 septembrie 2017 23:31:43
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.67 kb
#include<cstdio>
#include<fstream>
using namespace std;
FILE *f=fopen("rj.in","r");
ofstream g("rj.out");
int a[102][102],n,m,xi,yi,xf,yf,xr,yr,xj,yj,j[102][102];

void leej()
{
    int c[10000][2],dx[]={-1,0,1,0,-1,-1,1,1},dy[]={0,1,0,-1,-1,1,1,-1},p,u,x,xx,y,yy,i;
    p=u=1;
    c[1][0]=xi;
    c[1][1]=yi;
    j[xi][yi]=1;
    while(p<=u)
    {
            x=c[p][0];
            y=c[p][1];
            for(i=0;i<=7;i++)
            {
                    xx=x+dx[i];
                    yy=y+dy[i];
                    if(j[xx][yy]==0)
                    {
                        u++;
                        c[u][0]=xx;
                        c[u][1]=yy;
                        j[xx][yy]=j[x][y]+1;
                        /*if(xx==xf&&yy==yf)
                        {
                            return a[x][y];
                        }*/
                    }
            }
            p++;
    }
//return -1;
}

void lee()
{
    int c[10000][2],dx[]={-1,0,1,0,-1,-1,1,1},dy[]={0,1,0,-1,-1,1,1,-1},p,u,x,xx,y,yy,i;
    p=u=1;
    c[1][0]=xi;
    c[1][1]=yi;
    a[xi][yi]=1;
    while(p<=u)
    {
            x=c[p][0];
            y=c[p][1];
            for(i=0;i<=7;i++)
            {
                    xx=x+dx[i];
                    yy=y+dy[i];
                    if(a[xx][yy]==0)
                    {
                        u++;
                        c[u][0]=xx;
                        c[u][1]=yy;
                        a[xx][yy]=a[x][y]+1;
                        /*if(xx==xf&&yy==yf)
                        {
                            return a[x][y];
                        }*/
                    }
            }
            p++;
    }
//return -1;
}

void citire()
{
    int i,x,y,minim=1000000000,xmin,ymin;
    char c;
    fscanf(f,"%d%d",&n,&m);
    fscanf(f,"%c",&c);
    for(x=1;x<=n;x++)
    {
        for(y=1;y<=m;y++)
    {
        fscanf(f,"%c",&c);
        if(c=='X')
        a[x][y]=-1;
        else
            if(c=='R')
            xr=x,yr=y;
        else
            if(c=='J')
            xj=x,yj=y;

    }
    fscanf(f,"%c",&c);
    }
    for(i=0;i<=m+1;i++)
        a[0][i]=a[n+1][i]=-1;
    for(i=0;i<=n+1;i++)
        a[i][0]=a[i][m+1]=-1;
    for(x=0;x<=n+1;x++)
        for(y=0;y<=m+1;y++)
            j[x][y]=a[x][y];
    xi=xr;
    yi=yr;
    lee();
    xi=xj;
    yi=yj;
    leej();
    for(x=1;x<=n;x++)
        for(y=1;y<=m;y++)
        if(a[x][y]==j[x][y]&&a[x][y]<minim&&a[x][y]!=0&&a[x][y]!=-1)
    {
        minim=a[x][y];
        xmin=x;
        ymin=y;
    }
    g<<minim<<" "<<xmin<<" "<<ymin;
}


int main()
{
    citire();
    return 0;
}