Cod sursa(job #1836375)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 28 decembrie 2016 12:24:21
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.48 kb
#include <fstream>
using namespace std;
ifstream f ("rj.in");
ofstream g ("rj.out");
short v[101][101],m,n,i,j,xj[10009],yj[10009],xr[10009],yr[10009];
short dx[]={-1,-1,-1,0,0,1,1,1},dy[]={-1,0,1,-1,1,-1,0,1},p,u,k,mic=32000;
bool viz1[101][101],viz2[101][101];
char s[101];
short mat1[101][101],mat2[101][101],xs,ys;
bool inside(int x,int y)
{
    return x<=n&&y<=m&&x>=1&&y>=1;
}
void lee1()
{
    u=1;
    p=0;
    viz1[xr[1]][yr[1]]=1;
    while(p<=u)
    {
        ++p;
        for(k=0;k<8;++k)
        {
            if(inside(xr[p]+dx[k],yr[p]+dy[k]))
            {
                if(!viz1[xr[p]+dx[k]][yr[p]+dy[k]])
                {
                    if(!v[xr[p]+dx[k]][yr[p]+dy[k]])
                    {
                        ++u;
                        xr[u]=xr[p]+dx[k];
                        yr[u]=yr[p]+dy[k];
                        viz1[xr[u]][yr[u]]=1;
                        mat1[xr[u]][yr[u]]=mat1[xr[p]][yr[p]]+1;
                    }
                }
            }
        }
    }
}
void lee2()
{
    u=1;
    p=0;
    viz2[xj[1]][yj[1]]=1;
    while(p<=u)
    {
        ++p;
        for(k=0;k<8;++k)
        {
            if(inside(xj[p]+dx[k],yj[p]+dy[k]))
            {
                if(!viz2[xj[p]+dx[k]][yj[p]+dy[k]])
                {
                    if(!v[xj[p]+dx[k]][yj[p]+dy[k]])
                    {
                        ++u;
                        xj[u]=xj[p]+dx[k];
                        yj[u]=yj[p]+dy[k];
                        viz2[xj[u]][yj[u]]=1;
                        mat2[xj[u]][yj[u]]=mat2[xj[p]][yj[p]]+1;
                    }
                }
            }
        }
    }
}
int main()
{
    f>>n>>m;
    f.get();
    for(i=1;i<=n;++i)
    {
        f.getline(s+1,110);
        for(j=1;j<=m;++j)
        {
            if(s[j]=='R') {xr[1]=i;yr[1]=j;}
            if(s[j]=='J') {xj[1]=i;yj[1]=j;}
            if(s[j]=='X') v[i][j]=1;
        }
    }
    lee1();
    lee2();
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=m;++j)
        {
            if(mat1[i][j]==mat2[i][j]&&mat1[i][j]<mic&&mat1[i][j])
            {
                xs=i;ys=j;mic=mat1[i][j];
            }
        }
    }
//    for(i=1;i<=n;++i)
//    {
//        for(j=1;j<=m;++j) g<<mat1[i][j];
//        g<<'\n';
//    }
//    g<<'\n';
//    for(i=1;i<=n;++i)
//    {
//        for(j=1;j<=m;++j) g<<mat2[i][j];
//        g<<'\n';
//    }
    g<<mic+1<<' '<<xs<<' '<<ys;
    return 0;
}