Cod sursa(job #2338766)

Utilizator marcogoldPop Mihali Marco Silviu marcogold Data 7 februarie 2019 19:56:55
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.47 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

ofstream fo("rj.out");
ifstream fi("rj.in");

struct punct
{
    int x,y;
};

int n,m,lee[110][110];
bool viz[110][110];
char Cine[110][110];
int dirI[8]= {0, 0, 1, 1,-1,-1, 1,-1};
int dirJ[8]= {1,-1, 1,-1,-1, 1, 0, 0};
int lin,col,timp;
queue<punct> coada;
string a;

bool inside(int x,int y)
{
    if(x<1 || x>n)
        return false;
    if(y<1 || y>m)
        return false;

    return true;
}

int main()
{
    fi>>n>>m;
    fi.get();

    for(int i=1; i<=n; i++)
    {

   getline(fi,a);
    a=" "+a;
        for(int j=1; j<a.size(); j++)
        {
            if(a[j]=='J')
            {
                punct baga;
                baga.x=i;
                baga.y=j;
                coada.push(baga);
                viz[i][j]=true;
                Cine[i][j]='J';
                lee[i][j]=1;
            }
            if(a[j]=='R' )
            {
                punct baga;
                baga.x=i;
                baga.y=j;
                coada.push(baga);
                viz[i][j]=true;
                Cine[i][j]='R';
                  lee[i][j]=1;
            }
            if(a[j]==' ')
                lee[i][j]=50000;
            if(a[j]=='X')
                lee[i][j]=-1;
        }

        for(int rest=a.size();rest<=m;rest++)
            lee[i][rest]=50000;
    }


  while(coada.empty()==false)
    {
        int curentX=coada.front().x;
        int curentY=coada.front().y;
        coada.pop();

        for(int i=0; i<=7; i++)
        {
            punct vecin;

            vecin.x=curentX+dirI[i];
            vecin.y=curentY+dirJ[i];

            if(inside(vecin.x,vecin.y) && lee[vecin.x][vecin.y]!=-1  )
            {
                if(viz[vecin.x][vecin.y]==false)
                {
                    coada.push(vecin);
                    lee[vecin.x][vecin.y]=lee[curentX][curentY]+1;
                    viz[vecin.x][vecin.y]=true;
                    Cine[vecin.x][vecin.y]=Cine[curentX][curentY];
                }
                else if(Cine[vecin.x][vecin.y]!=Cine[curentX][curentY])
                {
                    if(lee[curentX][curentY]+1==lee[vecin.x][vecin.y])
                    {

                        fo<<lee[vecin.x][vecin.y]<<" "<<vecin.x<<" "<<vecin.y;

                    }
                }
            }
        }
    }

    fi.close();
    fo.close();
    return 0;
}