Cod sursa(job #2668362)

Utilizator Edwuard99Diaconescu Vlad Edwuard99 Data 4 noiembrie 2020 20:08:51
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include<iostream>
#include<stdio.h>
FILE *f=fopen("rj.in","r"),*g=fopen("rj.out","w");
int n,m,rx,ry,jx,jy;
unsigned int r[102][102],ju[102][102];
char a[102][102];
void bordare(int n,int m)
{
    n++;m++;
    for(int i=0;i<=n;i++)
        a[i][0]=a[i][m]='X';
    for(int j=0;j<=m;j++)
        a[0][j]=a[n][j]='X';
}
void read()
{
    fscanf(f,"%d %d",&n,&m);
    fgetc(f);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            a[i][j]=fgetc(f);
            if(a[i][j]=='R')
            {
                rx=i;
                ry=j;
                a[i][j]='X';
            }
            if(a[i][j]=='J')
            {
                jx=i;
                jy=j;
                a[i][j]='X';
            }
        }
        fgetc(f);
    }
}
void lee(int x,int y,unsigned int l[102][102])
{
    int cx[10003],cy[10003],in,sf,dx[]={1,1,1,-1,-1,-1,0,0,},dy[]={1,-1,0,1,-1,0,1,-1};
    in=sf=1;
    l[x][y]=1;
    cx[1]=x;
    cy[1]=y;
    while(in<=sf)
    {
        for(int k=0;k<8;k++)
        {
            x=cx[in]+dx[k];
            y=cy[in]+dy[k];
            if(a[x][y]==' '&&!l[x][y])
            {
                l[x][y]=l[cx[in]][cy[in]]+1;
                sf++;
                cx[sf]=x;
                cy[sf]=y;
            }
        }
        in++;
    }
}
int main()
{
    read();
    bordare(n,m);
    lee(rx,ry,r);
    lee(jx,jy,ju);
    int min=10000,imin,jmin;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(r[i][j]==ju[i][j]&&r[i][j]&&r[i][j]<min)
            {
                min=r[i][j];imin=i;jmin=j;
            }
    fprintf(g,"%d %d %d\n",min,imin,jmin);
    return 0;
}