Cod sursa(job #2496091)

Utilizator alexandru_strAlexandru Str alexandru_str Data 20 noiembrie 2019 10:55:15
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.46 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int n,m,lromeo,cromeo,ljul,cjul;
int dirL[]={-1,-1,0,1,1,1,0,-1},dirC[]={0,1,1,1,0,-1,-1,-1};
int a1[103][103],a2[103][103];
char s;
struct ura
{
	int linie,coloana;
};
ura coada[101*101+3];
void citeste()
{
	in>>n>>m;
	int i,j;
	for(i=1;i<=n;i++)
	{
		in.get(s);
		for(j=1;j<=m;j++)
		{
			in.get(s);
			if(s=='R')
			{
				lromeo=i;
				cromeo=j;
				a1[i][j]=1;
			}
			else
			if(s=='J')
			{
				ljul=i;
				cjul=j;
				a2[i][j]=1;
			}
			else
			if(s=='X')
			{
				a1[i][j]=-1;
				a2[i][j]=-1;
			}
		}
	}
}
void afiseaza()
{
	int i,j;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			out<<a1[i][j]<<" ";
		}
		out<<'\n';
	}

}

void bordeaza()
{
	int i,j;
	for(i=0;i<=m+1;++i)
	{
		a1[0][i]=-1;
		a2[0][i]=-1;
	}
	for(i=0;i<=n+1;++i)
	{
		a1[i][0]=-1;
		a2[i][0]=-1;
	}
	for(i=0;i<=m+1;++i)
	{
		a1[n+1][i]=-1;
		a2[n+1][i]=-1;
	}
	for(i=0;i<=n+1;++i)
	{
		a1[i][m+1]=-1;
		a2[i][m+1]=-1;
	}
}
void rezolva()
{
	int inc,sf,lin,col,i,j;
	inc=1;
	sf=1;
	coada[1].linie=lromeo;
	coada[1].coloana=cromeo;
	while(inc<=sf)
    {
        for(i=0;i<8;i++)
        {
            lin=coada[inc].linie+dirL[i];
            col=coada[inc].coloana+dirC[i];
            if(a1[lin][col]==0)
            {
                sf++;
                coada[sf].linie=lin;
                coada[sf].coloana=col;
                a1[lin][col]=a1[coada[inc].linie][coada[inc].coloana]+1;
            }
        }
        inc++;
    }
    coada[1].linie=ljul;
    coada[1].coloana=cjul;
    inc=1;
    sf=1;
    while(inc<=sf)
    {
        for(i=0;i<8;i++)
        {
            lin=coada[inc].linie+dirL[i];
            col=coada[inc].coloana+dirC[i];
            if(a2[lin][col]==0)
            {
                sf++;
                coada[sf].linie=lin;
                coada[sf].coloana=col;
                a2[lin][col]=a2[coada[inc].linie][coada[inc].coloana]+1;
            }
        }
        inc++;
    }
}
void afiseazaterogeu()
{
	int timpminim=10000000,x,y,i,j;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(a1[i][j]==a2[i][j]&&a1[i][j]>0)
			{
				if(a1[i][j]<timpminim)
				{
					timpminim=a1[i][j];
					x=i;
					y=j;
				}
			}
		}
	}
	out<<timpminim<<" "<<x<< " "<<y;
}
int main()
{
    citeste();
    bordeaza();
    rezolva();
    afiseazaterogeu();
    return 0;
}