Cod sursa(job #2197641)

Utilizator PetroaieBogdanPetroaie Bogdan PetroaieBogdan Data 22 aprilie 2018 17:04:04
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.6 kb
#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;
#define Nmax 101
#define romeo 1
#define julieta -2
ifstream fin("rj.in");
ofstream fout("rj.out");
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 &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'){
                    ir=i;jr=j+1;
                    a[ir][jr]=romeo;
                    }
                if(x[j]=='J'){
                    ij=i;jj=j+1;
                    a[ij][jj]=0;
                    }
            }
    }
}

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 xi, int yi, int n, int m)
{
    int cx[101*101],cy[101*101],pi,ps,k,ii,jj;
    cx[0]=xi;
    cy[0]=yi;
    pi=0;
    ps=0;
    while(pi<=ps)
    {
        for(k=0;k<8;k++)
        {
            ii=cx[pi]+dx[k];
            jj=cy[pi]+dy[k];
            if(bune(ii,jj,n,m)==1)
                if(a[ii][jj]==0)
                {
                    a[ii][jj]=a[cx[pi]][cy[pi]]+1;
                    ps++;
                    cx[ps]=ii;
                    cy[ps]=jj;
                }

        }
        pi++;

    }

}

void afisare_mijloc(int a[][Nmax], int n, int m, int ij, int jj, int mij)
{
    int cx[101*101],cy[101*101],pi,ps,k,i,j,ok;
    cx[0]=ij;
    cy[0]=jj;
    pi=0;
    ps=0;
    ok=0;
    while(ok==0 && pi<=ps)
    {
        for(k=0;k<8;k++)
        {
            i=cx[pi]+dx[k];
            j=cy[pi]+dy[k];
            if(bune(i,j,n,m)==1 && a[i][j]!=-1 && a[i][j]<a[cx[pi]][cy[pi]])
            {
                if(mij==a[i][j])
                {
                    fout<<mij<<" "<<i<<" "<<j;
                    ok=1;
                }
                ps++;
                cx[ps]=i;
                cy[ps]=j;

            }
        }
        pi++;
    }
}
int main()
{
    int n,m, a[Nmax][Nmax],ir,jr,ij,jj,i,j,mij;

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

    for(i=1;i<=n;i++){
            for(j=1;j<=m;j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }


       mij=a[ij][jj]/2+1;
        cout<<mij;

      afisare_mijloc(a,n,m,ij,jj,mij);

    return 0;
}