Cod sursa(job #2536502)

Utilizator Sorin123-21Enachioiu Sorin-Catalin Sorin123-21 Data 2 februarie 2020 10:23:23
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.52 kb
#include <fstream>

using namespace std;
ifstream in ("rj.in");
ofstream out ("rj.out");

int r[101][101],j[101][101];
bool obs[101][101];
int dlin[8]={-1 ,-1 , 0 , 1 , 1 , 1 ,   0 , -1 },
    dcol[8]={ 0 , 1 , 1 , 1 , 0 , -1 , -1 , -1 };

struct coada
{
    int x,y;

}temp,nou,ro,ju,a[10001];

bool capatr(int i,int k,int n,int m)
{
    return r[i][k]==0&&obs[i][k]==0&&i>0&&k>0&&k<=m&&i<=n;
}

bool capatj(int i,int k,int n,int m)
{
    return j[i][k]==0&&obs[i][k]==0&&i>0&&k>0&&k<=m&&i<=n;
}

void leer(int n,int m)
{
    int pr=0,ul=0,k;
    r[ro.x][ro.y]=1;
    a[0].x=ro.x;
    a[0].y=ro.y;
    while(pr<=ul)
    {
        temp=a[pr++];
        for(k=0;k<8;k++)
        {
            nou.x=temp.x+dlin[k];
            nou.y=temp.y+dcol[k];
            if(capatr(nou.x,nou.y,n,m))
            {
                r[nou.x][nou.y]=r[temp.x][temp.y]+1;
                a[++ul]=nou;
            }
        }
    }
}

void leej(int n,int m)
{
    int pr=0,ul=0,k;
    j[ju.x][ju.y]=1;
    a[0].x=ju.x;
    a[0].y=ju.y;
    while(pr<=ul)
    {
        temp=a[pr++];
        for(k=0;k<8;k++)
        {
            nou.x=temp.x+dlin[k];
            nou.y=temp.y+dcol[k];
            if(capatj(nou.x,nou.y,n,m))
            {
                j[nou.x][nou.y]=j[temp.x][temp.y]+1;
                a[++ul]=nou;
            }
        }
    }
}

int main()
{
    int n,m,i,k,a,b,minim=1000000;
    char c;
    in>>n>>m;
    in.get(c);
    for(i=1;i<=n;i++)
    {
        for(k=1;k<=m;k++)
        {
            in.get(c);
            if(c=='R')
            {
                ro.x=i;
                ro.y=k;
            }
            else
            {
                if(c=='J')
                {
                    ju.x=i;
                    ju.y=k;
                }
                else
                {
                    if(c=='X')
                        obs[i][k]=1;

                }
            }
        }
        if(c!='\n')
            in.get(c);
    }
    leer(n,m);
    leej(n,m);
    /*for(i=1;i<=n;i++)
    {
        for(k=1;k<=m;k++)
        {
            out<<obs[i][k]<<"  ";
        }
        out<<'\n';
    }
    out<<'\n';*/
    for(i=1;i<=n;i++)
    {
        for(k=1;k<=m;k++)
        {
            if(obs[i][k]==0&&r[i][k]==j[i][k]&&r[i][k]<=minim&&r[i][k]!=0)
            {
                a=i;
                b=k;
                minim=r[i][k];
            }
        }
    }
    out<<minim<<" "<<a<<" "<<b;
    return 0;
}