Cod sursa(job #2490450)

Utilizator Nustiuuasdfasdf Nustiuu Data 10 noiembrie 2019 12:15:57
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.09 kb
#include <stdio.h>
#include<string.h>
#include<queue>
using namespace std;

FILE*f=fopen("rj.in","r");
FILE*g=fopen("rj.out","w");
int Rx,Ry,Jx,Jy;
int n,m;
int oras[101][101];
int oras1[101][101];
int di[9]={0,0,1,-1,-1,-1,1,1};
int dj[9]={1,-1,0,0,-1,1,-1,1};
queue<pair<int,int> >coada;

void citire()
{
    char c;
    fscanf(f,"%d%d\n",&n,&m);
    for(int i=1;i<=n;i++)
        {
        for(int j=1;j<=m;j++)
                {
                    fscanf(f,"%c",&c);
                    if(c=='\n')
                        fscanf(f,"%c",&c);
                        if(c=='X')
                            oras[i][j]=-1,oras1[i][j]=-1;
                        if(c=='R')
                            Rx=i,Ry=j;
                        if(c=='J')
                            Jx=i,Jy=j;
                    }
        }
}

bool OK(int i,int j)
{
    if(i<1||j<1||i>n||j>m)
        return false;
    if(oras[i][j]==-1)
        return false;
    return true;
}

void Lee()
{
    int i,j,iu,ju;
    oras[Rx][Ry]=1;
    coada.push(make_pair(Rx,Ry));
    while(!coada.empty())
                {
                    i=coada.front().first;
                    j=coada.front().second;
                    coada.pop();
                    for(int dr=0;dr<=7;dr++)
                            {
                                iu=i+di[dr];
                                ju=j+dj[dr];
                                if(OK(iu,ju)&&oras[iu][ju]==0)
                                        {
                                            oras[iu][ju]=oras[i][j]+1;
                                            coada.push(make_pair(iu,ju));
                                        }
                            }
                }
    oras1[Jx][Jy]=1;
    coada.push(make_pair(Jx,Jy));
    while(!coada.empty())
                {
                    i=coada.front().first;
                    j=coada.front().second;
                    coada.pop();
                    for(int dr=0;dr<=7;dr++)
                            {
                                iu=i+di[dr];
                                ju=j+dj[dr];
                                if(OK(iu,ju)&&oras1[iu][ju]==0)
                                        {
                                            oras1[iu][ju]=oras1[i][j]+1;
                                            coada.push(make_pair(iu,ju));
                                        }
                            }
                }
    int max=0,xm,ym;
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
               if(oras1[i][j]==oras[i][j]&&oras[i][j]!=-1)
                    if(max>oras[i][i]||max==0)
                        max=oras[i][j],xm=i,ym=j;
        for(i=1;i<=n;i++)
    {
            for(j=1;j<=m;j++)
                printf("%d ",oras[i][j]);
                printf("\n");
    }
    printf("\n\n");
     for(i=1;i<=n;i++)
    {
            for(j=1;j<=m;j++)
                printf("%d ",oras1[i][j]);
                printf("\n");
    }
    fprintf(g,"%d %d %d",max,xm,ym);

}

int main()
{
    citire();
    Lee();
}