Cod sursa(job #2561874)

Utilizator cosmin1972Nour Mihai-Cosmin cosmin1972 Data 29 februarie 2020 10:52:52
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

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

queue <int> qx,qy;

int n,m;
int mat[101][101];
int dx[8]={-1,-1,-1,0,0,1,1,1},dy[8]={-1,0,1,-1,1,-1,0,1};

void afis()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            cout<<mat[i][j]<<" ";
        cout<<"\n";

    }
}

bool verif(int x,int y)
{
    if(x>0 && x<=n && y>0 && y<=m)
        return 1;
    else
        return 0;
}

void bfs()
{
    while(qx.empty()==0)
    {
        int nowx=qx.front();
        int nowy=qy.front();
        for(int i=0;i<8;i++)
        {
            int nextx=nowx+dx[i];
            int nexty=nowy+dy[i];
            if(verif(nextx,nexty)==1 && mat[nextx][nexty]!=100000)
            {
                if(mat[nextx][nexty]==0)
                {
                    if(mat[nowx][nowy]>0)
                        mat[nextx][nexty]=mat[nowx][nowy]+1;
                    else
                        mat[nextx][nexty]=mat[nowx][nowy]-1;
                    qx.push(nextx);
                    qy.push(nexty);
                }
                else if(mat[nextx][nexty]==-(mat[nowx][nowy]-1) && mat[nowx][nowy]<0)
                {
                    out<<mat[nextx][nexty]<<" "<<nextx<<" "<<nexty;
                    return;
                }
            }
        }
        qx.pop();
        qy.pop();
    }
}

void citire()
{
    in>>n>>m;
    in.get();
    for(int i=1;i<=n;i++)
    {
        char s[150];
        in.getline(s,150);
        for(int j=0;j<m;j++)
        {
            if(s[j]=='R')
            {
                qx.push(i);
                qy.push(j+1);
                mat[i][j+1]=1;
            }
            else if(s[j]=='J')
            {
                qx.push(i);
                qy.push(j+1);
                mat[i][j+1]=-1;
            }
            else if(s[j]=='X')
            {
                mat[i][j+1]=100000;
            }
            else
            {
                mat[i][j+1]=0;
            }

        }
    }
}

int main()
{
    citire();
    bfs();
    return 0;
}