Cod sursa(job #2179609)

Utilizator PetroaieBogdanPetroaie Bogdan PetroaieBogdan Data 20 martie 2018 12:43:48
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;
#define Nmax 101
#define romeo 1000
#define julieta 2000
ifstream fin("rj.in");
ofstream fout("rj.out");
const int ci[]={-1,-1,0,1,1,1,0,-1};
const int cj[]={0,1,1,1,0,-1,-1,-1};
void citire(int &n,int &m ,int a[][Nmax],int &ir, int &jr, int &ij, int &jj)
{
    int i,j;
    char x[Nmax];
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++)
    {
       fin.getline(x,101,'\n');
        for(j=0;j<m;j++)
            {
                if(x[j]==' ')
                    a[i][j+1]=0;
                if(x[j]=='X')
                    a[i][j+1]=-1;
                if(x[j]=='R'){
                    a[i][j+1]=romeo;ir=i;jr=j+1;}
                if(x[j]=='J'){
                    a[i][j+1]=julieta;ij=i;jj=j+1;}
            }
    }
}

inline bool bune(int i, int j, int n, int m)
{
    if(i>0 && i<=n && j>0 && j<=m)
        return 1;
    return 0;
}

void lee(int a[][Nmax],int i, int j, int x, int n, int m)
{
    int k;
    if(bune(i,j,n,m)==0)
        return;

    if(a[i][j]==-1)
        return;

    if(a[i][j]==0 || a[i][j]>x)
        a[i][j]=x;
    else
        return;

    for(k=0;k<=7;k++)
        lee(a,i+ci[k],j+cj[k],x+1,n,m);

}

int main()
{
    int n,m, a[Nmax][Nmax],ir,jr,ij,jj,i,j,x,b[Nmax][Nmax];

    citire(n,m,a,ir,jr,ij,jj);

    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            b[i][j]=a[i][j];

    lee(a,ir,jr,1,n,m);
    lee(b,ij,jj,1,n,m);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j] && a[i][j]>=1)
                fout<<a[i][j]<<" "<<i<<" "<<j<<"\n";

    return 0;
}