Cod sursa(job #1247544)

Utilizator dorin31Geman Dorin Andrei dorin31 Data 22 octombrie 2014 22:35:45
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.58 kb
#include <stdio.h>

using namespace std;

typedef struct{int x,y;}COADA;
int a[102][102]; int b[102][102];
int dx[]={-1,-1,-1,0,0,1,1,1}; // deplasarea pe linii
int dy[]={-1,0,1,-1,1,-1,0,1}; // deplasarea pe coloane
int min=100000;

int main()
{
    // citirea si scrierea in fisiere
    FILE *f=fopen("rj.in","r");
    FILE *g=fopen("rj.out","w");

    int n,m,i,j,ur=0,uj=0,pr=1,pj=1,xv,yv,x,y;
    char crj;
    COADA r[10001],jul[10001];
    fscanf (f,"%d",&n); fscanf (f,"%d",&m);

    for (i=1;i<=n;++i)
        {
            fscanf (f,"%c",&crj); // caracterul "endline" b-)
            for (j=1;j<=m;++j)
                {
                    fscanf (f,"%c",&crj);
                    if (crj=='R')
                        {
                            a[i][j]=1;
                            b[i][j]=-1;
                            r[++ur].x=i; r[ur].y=j;
                        }
                    if (crj=='J')
                        {
                            a[i][j]=-2;
                            b[i][j]=1;
                            jul[++uj].x=i; jul[uj].y=j;
                        }
                    if (crj==' ')
                        a[i][j]=b[i][j]=0;
                    if (crj=='X')
                        a[i][j]=b[i][j]=-1;
                }
        }
    while (pr<=ur)
        {
            x=r[pr].x; y=r[pr++].y;
            for (i=0;i<=7;++i)
                {
                    xv=x+dx[i];
                    yv=y+dy[i];
                    if( a[xv][yv]==0 && xv!=0 && xv!=n+1 && yv!=0 && yv!=m+1 ) // daca nu iese din matrice
                        {
                            a[xv][yv]=a[x][y]+1;
                            r[++ur].x=xv; r[ur].y=yv;
                        }
                }
        }
    a[jul[ur].x][jul[ur].y]=1;
    while (pj<=uj)
        {
            x=jul[pj].x; y=jul[pj++].y;
            for (i=0;i<=7;++i)
                {
                    xv=x+dx[i];
                    yv=y+dy[i];
                    if ( b[xv][yv]==0 && xv!=0 && xv!=n+1 && yv!=0 && yv!=m+1 ) // daca nu iese din matrice
                        {
                            b[xv][yv]=b[x][y]+1;
                            jul[++uj].x=xv; jul[uj].y=yv;
                        }
                }
        }
    for (i=1;i<=n;++i)
        for (j=1;j<=m;++j)
            if (a[i][j]<min && a[i][j]==b[i][j] && a[i][j]>1)
                {
                    min=a[i][j];
                    x=i;
                    y=j;
                }
    fprintf (g,"%d"" ""%d"" ""%d",min,x,y);
    return 0;
}