Cod sursa(job #1884135)

Utilizator NannyiMaslinca Alecsandru Mihai Nannyi Data 18 februarie 2017 14:33:27
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.03 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>

using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

int n,m,sti,stj,spi,spj;

int dl[8]= {-1,1,1,-1,0,1,0,-1};
int dc[8]= {1,1,-1,-1,1,0,-1,0};


char v[105][105];
int x[105][105];
int z[105][105];

void bordare(int o[105][105])
{
    for(int i=0;i<=n+1;i++)
    {
        o[i][0]=-1;
        o[i][m+1]=-1;
    }
    for (int i=0;i<=m+1;i++)
    {
        o[0][i]=-1;
        o[n+1][i]=-1;
    }
}
void filling(int o[105][105],int p[105][105])
{
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
    {
        if (v[i][j]=='X')
        {
            x[i][j]=-1;
            z[i][j]=-1;
        }
        else if (v[i][j]==' ')
        {
            x[i][j]=0;
            z[i][j]=0;
        }
        else if (v[i][j]=='R')
            {x[i][j]=1;
            sti=i;
            stj=j;}
        else if (v[i][j]=='J')
            {z[i][j]=1;
            spi=i;
            spj=j;}
    }
}

void lee(int o[105][105],int i,int j)
{
    queue < pair < int , int > > coada;
    coada.push(make_pair(i,j));
    while (!coada.empty())
    {
        int w=coada.front().first;
        int s=coada.front().second;
        coada.pop();
        for (int k=0;k<8;k++)
        {
            if (o[w+dl[k]][s+dc[k]]==0)
            {
                o[w+dl[k]][s+dc[k]]=o[w][s]+1;
                coada.push(make_pair(w+dl[k],s+dc[k]));
            }
        }
    }
}

int main()
{
    int i,j;
    f>>n>>m;
    for (i=0;i<=n;i++)
        f.getline(1+v[i],m+1);
    bordare(x);
    bordare(z);
    filling(x,z);
    lee(x,sti,stj);
    lee(z,spi,spj);
    int minim=101;
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            {
                if (x[i][j]==z[i][j]&&x[i][j]<minim&&x[i][j]>0)
                {
                    minim=x[i][j];
                    sti=i;
                    stj=j;
                }
            }
    g<<minim<<' '<<sti<<' '<<stj;
    return 0;
}