Cod sursa(job #1584846)

Utilizator RazvanatorHilea Razvan Razvanator Data 30 ianuarie 2016 15:34:34
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <string>

using namespace std;

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

struct coord
{
    int x,y;
}as;

int mat[100][100],m,n;
char x;
string a;
queue <coord> coada;
int di[4]={0,0,1,-1};
int dj[4]={-1,1,0,0};

void Read()
{
    fin>>n>>m;
    fin.ignore();
    for (int i=0;i<n;i++) {
        getline(fin,a);
        for (int j=0;j<m;j++) {
            if (a[j]=='X') mat[i][j]=-1;
            else if (a[j]=='R' || a[j]=='J') {mat[i][j]=1;as.x=i,as.y=j;coada.push(as);}
                else if (a[j]==' ') mat[i][j]=0;
        }
    }
}

void Lee()
{
    int i,j,i_urm,j_urm;
    while (!coada.empty()) {
        i=coada.front().x;
        j=coada.front().y;
        coada.pop();
        for (int x=0;x<4;x++) {
            i_urm=i+di[x];
            j_urm=j+dj[x];
            if (mat[i_urm][j_urm]==0 && i_urm>=0 && j_urm>=0 && i_urm<n && j_urm<m) {
                mat[i_urm][j_urm]=mat[i][j]+1;
                as.x=i_urm;
                as.y=j_urm;
                coada.push(as);
            }
            else if (mat[i_urm][j_urm]==mat[i][j]+1 && i_urm>=0 && j_urm>=0 && i_urm<n && j_urm<m) {
                as.x=i_urm;
                as.y=j_urm;
                return;
            }
        }
    }
}

int main()
{
    Read();
    Lee();
    fout<<mat[as.x][as.y]-1<<" "<<as.x+1<<" "<<as.y+1;
}