Cod sursa(job #1082064)

Utilizator 0051David Sera 0051 Data 14 ianuarie 2014 09:29:11
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.33 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <iomanip>

using namespace std;

#define MAX 102

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

int r[MAX][MAX],ju[MAX][MAX];
queue < pair < int,int > > coada;

void lee(int a[][MAX])
{
    int i,j;
    while(!coada.empty()){
        i=coada.front().first;
        j=coada.front().second;
        coada.pop();
        if(!a[i-1][j-1]){
            a[i-1][j-1]=a[i][j]+1;
            coada.push(make_pair(i-1,j-1));
        }
        if(!a[i-1][j]){
            a[i-1][j]=a[i][j]+1;
            coada.push(make_pair(i-1,j));
        }
        if(!a[i-1][j+1]){
            a[i-1][j+1]=a[i][j]+1;
            coada.push(make_pair(i-1,j+1));
        }
        if(!a[i][j+1]){
            a[i][j+1]=a[i][j]+1;
            coada.push(make_pair(i,j+1));
        }
        if(!a[i][j-1]){
            a[i][j-1]=a[i][j]+1;
            coada.push(make_pair(i,j-1));
        }
        if(!a[i+1][j-1]){
            a[i+1][j-1]=a[i][j]+1;
            coada.push(make_pair(i+1,j-1));
        }
        if(!a[i+1][j]){
            a[i+1][j]=a[i][j]+1;
            coada.push(make_pair(i+1,j));
        }
        if(!a[i+1][j+1]){
            a[i+1][j+1]=a[i][j]+1;
            coada.push(make_pair(i+1,j+1));
        }
    }
}

int main()
{
    int n,m,i,j,x1,j1,x2,j2,x;
    fin>>n>>m;
    char s;
    fin.get(s);
    for(i=1;i<=n;i++)
        for(j=1;j<=m+1;j++){
            fin.get(s);
            if(s=='\n'){
                break;
            }
            if(s=='X')
                r[i][j]=ju[i][j]=-1;
            if(s=='R'){
                x1=i;
                j1=j;
            }
            if(s=='J'){
                x2=i;
                j2=j;
            }
        }
    for(i=0;i<=n+1;i++){
        r[i][0]=-1;
        r[i][m+1]=-1;
        ju[i][0]=-1;
        ju[i][m+1]=-1;
    }
    for(i=0;i<=m+1;i++){
        r[0][i]=-1;
        r[n+1][i]=-1;
        ju[0][i]=-1;
        ju[n+1][i]=-1;
    }
    coada.push(make_pair(x1,j1));
    r[x1][j1]=1;
    lee(r);
    coada.push(make_pair(x2,j2));
    ju[x2][j2]=1;
    lee(ju);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(r[i][j]==ju[i][j]&&r[i][j]>0&&ju[i][j]>0)
                fout<<r[i][j]<<" "<<i<<" "<<j<<"\n";
    return 0;
}