Cod sursa(job #2162476)

Utilizator tutuganTutugan Stefan Alexandru tutugan Data 12 martie 2018 11:20:27
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.96 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int a[102][102];
int dl[8]={-1,-1,0,+1,+1,+1,0,-1};
int dc[8]={0,+1,+1,+1,0,-1,-1,-1};
struct lee
{
    int l,c;
}coadar[100*100+1],coadaj[100*100+1],pozcr,pozcj;
int main()
{
    ifstream fin("rj.in");
    ofstream fout("rj.out");
    int n,m,i,j,drr=0,str=0,drj=0,stj=0;
    char s[101];
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++)
    {
        fin.getline(s,101);
        for(j=1;j<=m;j++)
        {
            if(s[j-1]=='X')
                a[i][j]=10000;
            else
            if(s[j-1]==' ')
                a[i][j]=0;
            else
            if(s[j-1]=='R')
            {
                a[i][j]=1;
                coadar[drr]=(lee){i,j};
            }
            else
            if(s[j-1]=='J')
            {
                a[i][j]=-1;
                coadaj[drj]=(lee){i,j};
            }
        }
    }
    for(i=0;i<=n+1;i++)
    {
        a[i][0]=10000;
        a[i][m+1]=10000;
    }
    for(i=0;i<=m+1;i++)
    {
        a[0][i]=10000;
        a[n+1][i]=10000;
    }
//    for(i=0;i<=n+1;i++)
//    {
//        for(j=0;j<=m+1;j++)
//        cout<<a[i][j]<<" ";
//        cout<<endl;
//    }
    int gasit=0,lj,cj,lr,cr,pasj,pasr,lcj,ccj,lcr,ccr,imax,jmax,val;
    while(!gasit)
    {
        pozcj=coadaj[stj];
        lj=pozcj.l;
        cj=pozcj.c;
        pasj=a[lj][cj];
        do
        {
            for(i=0;i<8;i++)
            {
                lcj=lj+dl[i];
                ccj=cj+dc[i];
                if(a[lcj][ccj]>=0 and a[lcj][ccj]!=10000)
                {
                    if(a[lcj][ccj]==0)
                    {
                        drj++;
                        coadaj[drj]=(lee){lcj,ccj};
                        a[lcj][ccj]=pasj-1;
                    }
                    else
                    if(a[lcj][ccj]>0 and gasit==0)
                    {
                        gasit=1;
                        imax=lcj;
                        jmax=ccj;
                        if(fabs(a[lcj][ccj])<fabs(pasj-1))
                            val=fabs(pasj-1);
                        else
                            val=fabs(a[lcj][ccj]);
                    }
                }
            }
            stj++;
            pozcj=coadaj[stj];
            lj=pozcj.l;
            cj=pozcj.c;

        }
        while(a[lj][cj]==pasj);
//            for(i=0;i<=n+1;i++)
//    {
//        for(j=0;j<=m+1;j++)
//        cout<<a[i][j]<<" ";
//        cout<<endl;
//    }
//    return 0;
        pozcr=coadar[str];
        lr=pozcr.l;
        cr=pozcr.c;
        pasr=a[lr][cr];
        do
        {
            for(i=0;i<8;i++)
            {
                lcr=lr+dl[i];
                ccr=cr+dc[i];
                if(a[lcr][ccr]<=0)
                {
                    if(a[lcr][ccr]==0)
                    {
                        drr++;
                        coadar[drr]=(lee){lcr,ccr};
                        a[lcr][ccr]=pasr+1;
                    }
                    else
                    if(a[lcr][ccr]<0 and gasit==0)
                    {
                        gasit=1;
                        imax=lcr;
                        jmax=ccr;
                        if(fabs(a[lcr][ccr])<fabs(pasr+1))
                            val=fabs(pasr+1);
                        else
                            val=fabs(a[lcr][ccr]);
                    }
                }
            }
            str++;
            pozcr=coadar[str];
            lr=pozcr.l;
            cr=pozcr.c;
        }
        while(a[lr][cr]==pasr);
//          for(i=0;i<=n+1;i++)
//    {
//        for(j=0;j<=m+1;j++)
//        cout<<a[i][j]<<" ";
//        cout<<endl;
//    }
    }
              for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        cout<<a[i][j]<<" ";
        cout<<endl;
    }

    fout<<val<<" "<<imax<<" "<<jmax;
    return 0;
}