Cod sursa(job #2371323)

Utilizator rares22iunieDoroftei Rares rares22iunie Data 6 martie 2019 17:10:58
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.15 kb
#include <iostream>
#include <cstdio>
using namespace std;
struct chestii
{
    int i,j,nr3;
};
chestii v[22504];
int r[103][103],ji[103][103],a[103][103],n,m,min1,i3;
void verif(int i,int j,int nr)
{
    if(a[i][j]!=-1 && i<=n && i>=1 && j<=m && j>=1)
    {
        if(r[i][j]==0)
        {
            i3++;
            v[i3].i=i;
            v[i3].j=j;
            v[i3].nr3=nr+1;
            r[i][j]=nr+1;
        }
        else
        {
            if(r[i][j]>nr+1)
            {
                i3++;
            v[i3].i=i;
            v[i3].j=j;
            v[i3].nr3=nr+1;
            r[i][j]=nr+1;
            }
        }
    }
}
void verif1(int i,int j,int nr)
{
    if(a[i][j]!=-1 && i<=n && i>=1 && j<=m && j>=1 )
    {
        if(ji[i][j]==0)
        {
            i3++;
            v[i3].i=i;
            v[i3].j=j;
            v[i3].nr3=nr+1;
            ji[i][j]=nr+1;
        }
        else
        {
            if(ji[i][j]>nr+1)
            {
                i3++;
            v[i3].i=i;
            v[i3].j=j;
            v[i3].nr3=nr+1;
            ji[i][j]=nr+1;
            }
        }
    }
}
int i,j,i1,j1,i2,j2,pri,prj,pji,pjj,tmp;
char ch[104];
int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d %d",&n,&m);
    cin.get();
    for(i=1;i<=n;i++)
    {
        cin.getline(ch,sizeof(ch));
        for(j=0;j<=m-1;j++)
        {
            if(ch[j]=='X')
                a[i][j+1]=-1;
            if(ch[j]=='R')
            {
                pri=i;
                prj=j+1;
                a[i][j+1]=-1;
            }
            if(ch[j]=='J')
            {
                pji=i;
                pjj=j+1;
                a[i][j+1]=-1;
            }
        }
    }
    tmp=0;
    v[1].i=pri;
    v[1].j=prj;
    i1=1;
    i3=1;
    while(v[i1].i!=0)
    {
        tmp++;
        verif(v[i1].i+1,v[i1].j,v[i1].nr3);
        verif(v[i1].i,v[i1].j+1,v[i1].nr3);
        verif(v[i1].i+1,v[i1].j+1,v[i1].nr3);
        verif(v[i1].i-1,v[i1].j,v[i1].nr3);
        verif(v[i1].i,v[i1].j-1,v[i1].nr3);
        verif(v[i1].i-1,v[i1].j+1,v[i1].nr3);
        verif(v[i1].i+1,v[i1].j-1,v[i1].nr3);
        verif(v[i1].i-1,v[i1].j-1,v[i1].nr3);
        i1++;
    }
    tmp=0;
    for(i=0;i<=22500;i++)
        {
            v[i].i=0;
            v[i].j=0;
            v[i].nr3=0;
        }
    v[1].i=pji;
    v[1].j=pjj;
    i1=1;
    i3=1;
    while(v[i1].i!=0)
    {
        verif1(v[i1].i+1,v[i1].j,v[i1].nr3);
        verif1(v[i1].i,v[i1].j+1,v[i1].nr3);
        verif1(v[i1].i+1,v[i1].j+1,v[i1].nr3);
        verif1(v[i1].i-1,v[i1].j,v[i1].nr3);
        verif1(v[i1].i,v[i1].j-1,v[i1].nr3);
        verif1(v[i1].i-1,v[i1].j+1,v[i1].nr3);
        verif1(v[i1].i+1,v[i1].j-1,v[i1].nr3);
        verif1(v[i1].i-1,v[i1].j-1,v[i1].nr3);
        i1++;
    }
    min1=22500;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        if(r[i][j]==ji[i][j] && r[i][j]!=0)
        if(min1>r[i][j])
        {
            min1=r[i][j];
            i2=i;
            j2=j;
        }
    printf("%d %d %d",min1,i2,j2);
    return 0;
}