Cod sursa(job #2201940)

Utilizator PetroaieBogdanPetroaie Bogdan PetroaieBogdan Data 6 mai 2018 17:45:50
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.36 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

#define Nmax 101
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};

void citire(int a[][Nmax], int &n, int &m, int &xr, int&yr, int &xj, int &yj)
{
    int i,j;
    char s[Nmax];
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++)
    {
        fin.getline(s,Nmax,'\n');
        for(j=0;j<m;j++)
        {
            if(s[j]==' ')
                a[i][j+1]=0;
            if(s[j]=='X')
                a[i][j+1]=-1;
            if(s[j]=='R')
            {
                xr=i; yr=j+1;
                a[i][j+1]=0;
            }
            if(s[j]=='J')
            {
                xj=i; yj=j+1;
                a[i][j+1]=0;
            }
        }
    }

}
void afisare(int a[][Nmax], int n, int m)
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
}
inline bool bune(int i, int j, int n, int m, int a[][Nmax])
{

   if(i>0 && i<=n && j<=m && j>0)
        if(a[i][j]==0)
            return 1;
    return 0;
}
void lee(int a[][Nmax], int n, int m, int xi, int yi)
{
    int cx[Nmax*Nmax],cy[Nmax*Nmax],pi,ps,k,i,j;
    cx[0]=xi;
    cy[0]=yi;
    pi=0;
    ps=0;
    while(pi<=ps)
    {

        for(k=0;k<8;k++)
        {
            i=cx[pi]+dx[k];
            j=cy[pi]+dy[k];
            if(bune(i,j,n,m,a)==1)
            {
                a[i][j]=a[cx[pi]][cy[pi]]+1;
                ps++;
                cx[ps]=i;
                cy[ps]=j;
            }
        }
        pi++;
    }
}
int main()
{
        int a[Nmax][Nmax],n,m,xr,yr,xj,yj,b[Nmax][Nmax],i,j,ok=0,mij;
        citire(a,n,m,xr,yr,xj,yj);
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                b[i][j]=a[i][j];
        a[xr][yr]=1;
        b[xj][yj]=1;
        lee(a,n,m,xr,yr);
        lee(b,n,m,xj,yj);
        if(a[xj][yj]%2==0)
            mij=(a[xj][yj]/2);

        else
            mij=(a[xj][yj]/2)+1;
       // afisare(a,n,m);
        for( i=1;i<=n;i++)
            for( j=1;j<=m;j++)
                if(a[i][j]==b[i][j] && a[i][j]!=0 && a[i][j]!=-1 ){
                    fout<<a[i][j]<<" "<<i<<" "<<j;}

       // cout<<endl<<xr<<" "<<yr<<" "<<xj<<" "<<yj;
        return 0;
}