Cod sursa(job #1344246)

Utilizator andi12Draghici Andrei andi12 Data 16 februarie 2015 15:47:59
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.33 kb
#include <cstdio>

using namespace std;
const int N=100;
int mat[N+1][N+1],n,m;
int lee1[N+1][N+1];
int lee2[N+1][N+1];
struct rj
{
    int x,y;
};
rj c[4*(N+1)];
int dx[]={1,0,-1,0,1,-1,1,-1};
int dy[]={0,1,0,-1,1,-1,-1,1};
int petabla(int x,int y)
{
    if(x>=1 && x<=n && y>=1 && y<=m)
        return 1;
    else
        return 0;
}
void fc(int i,int j)
{
    int x,y,k,p=1,u=2;
    c[p].x=i;
    c[p].y=j;
    while(p!=u)
    {
        for(k=0;k<=7;k++)
        {
            x=c[p].x+dx[k];
            y=c[p].y+dy[k];
            if(petabla(x,y)==1 && lee1[x][y]==0 && mat[x][y]==0)
            {
                u++;
                if(u==4*N)
                    u=1;
                lee1[x][y]=lee1[c[p].x][c[p].y]+1;
                c[u-1].x=x;
                c[u-1].y=y;
            }
        }
        p++;
        if(p==4*N)
            p=1;
    }
}
int main()
{
    FILE *in,*out;
    in=fopen("rj.in","r");
    out=fopen("rj.out","w");
    int i,j,xr,yr,xj,yj,min=99999,pozi,pozj;
    fscanf(in,"%d%d",&n,&m);
    char c;
    fscanf(in,"%c",&c);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fscanf(in,"%c",&c);
            if(c=='R')
            {
                xr=i;
                yr=j;
            }
            if(c=='J')
            {
                xj=i;
                yj=j;
            }
            if(c=='X')
                mat[i][j]=-1;
        }
        fscanf(in,"%c",&c);
    }
    lee1[xr][yr]=1;
    fc(xr,yr);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            lee2[i][j]=lee1[i][j];
            lee1[i][j]=0;
        }
    }
    /////////
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fprintf(out,"%d ",lee2[i][j]);
        }
        fprintf(out,"\n");
    }
    lee1[xj][yj]=1;
    fc(xj,yj);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(lee1[i][j]==lee2[i][j] && lee1[i][j]!=0)
            {
                if(lee1[i][j]<min)
                {
                    min=lee1[i][j];
                    pozi=i;
                    pozj=j;
                }
            }
        }
    }
    fprintf(out,"\n");
    ///////
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fprintf(out,"%d ",lee1[i][j]);
        }
        fprintf(out,"\n");
    }
    fprintf(out,"%d %d %d",min,pozi,pozj);
    return 0;
}