Cod sursa(job #2151601)

Utilizator alindima99Alin Dima alindima99 Data 4 martie 2018 17:47:50
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.94 kb
#include <fstream>
#include <queue>

using namespace std;

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

char mat[110][110];
int viz[110][110];
int lung[110][110];
int tata[10000];

int main()
{
    int n, m, i, j;
    fin>>n>>m;
    fin.get();

    queue< pair<int, int> > coada;

    for(i=1;i<=n;i++)
        fin.getline(mat[i]+1, m+1);

    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(mat[i][j]=='R'){
                pair<int, int> pereche(i, j);
                coada.push(pereche);
                viz[coada.front().first][coada.front().second]=1;
            }

    while(!coada.empty()){
        pair<int, int> nod=coada.front();
        int i=nod.first, j=nod.second;
        lung[i][j]++;

        if(mat[i][j]=='J'){
            int l=(lung[i][j]+1)/2;
            cout<<l<<" ";

            int x=i*m+j;
            for(int k=1;k<l;k++)
                x=tata[x];

            cout<<(x-x%m)/m<<" "<<x%m;

            break;
        }

        if(mat[i-1][j-1]!=0 && mat[i-1][j-1]!='X' && viz[i-1][j-1]==0){
            pair <int, int> x(i-1, j-1);
            viz[i-1][j-1]=1;
            lung[i-1][j-1]+=lung[i][j];
            coada.push(x);
            tata[(i-1)*m+j-1]=i*m+j;
        }

        if(mat[i-1][j]!=0 && mat[i-1][j]!='X' && viz[i-1][j]==0){
            pair <int, int> x(i-1, j);
            viz[i-1][j]=1;
            lung[i-1][j]+=lung[i][j];
            coada.push(x);
            tata[(i-1)*m+j]=i*m+j;
        }

        if(mat[i-1][j+1]!=0 && mat[i-1][j+1]!='X' && viz[i-1][j+1]==0){
            pair <int, int> x(i-1, j+1);
            viz[i-1][j+1]=1;
            lung[i-1][j+1]+=lung[i][j];
            coada.push(x);
            tata[(i-1)*m+j+1]=i*m+j;
        }

        if(mat[i][j-1]!=0 && mat[i][j-1]!='X' && viz[i][j-1]==0){
            pair <int, int> x(i, j-1);
            viz[i][j-1]=1;
            lung[i][j-1]+=lung[i][j];
            coada.push(x);
            tata[(i)*m+j-1]=i*m+j;
        }

        if(mat[i][j+1]!=0 && mat[i][j+1]!='X' && viz[i][j+1]==0){
            pair <int, int> x(i, j+1);
            viz[i][j+1]=1;
            lung[i][j+1]+=lung[i][j];
            coada.push(x);
            tata[i*m+j+1]=i*m+j;
        }

        if(mat[i+1][j-1]!=0 && mat[i+1][j-1]!='X' && viz[i+1][j-1]==0){
            pair <int, int> x(i+1, j-1);
            viz[i+1][j-1]=1;
            lung[i+1][j-1]+=lung[i][j];
            coada.push(x);
            tata[(i+1)*m+j-1]=i*m+j;
        }

        if(mat[i+1][j]!=0 && mat[i+1][j]!='X' && viz[i+1][j]==0){
            pair <int, int> x(i+1, j);
            viz[i+1][j]=1;
            lung[i+1][j]+=lung[i][j];
            coada.push(x);
            tata[(i+1)*m+j]=i*m+j;
        }

        if(mat[i+1][j+1]!=0 && mat[i+1][j+1]!='X' && viz[i+1][j+1]==0){
            pair <int, int> x(i+1, j+1);
            viz[i+1][j+1]=1;
            lung[i+1][j+1]+=lung[i][j];
            coada.push(x);
            tata[(i+1)*m+j+1]=i*m+j;
        }

        coada.pop();
    }

    return 0;
}