Cod sursa(job #1049654)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 7 decembrie 2013 17:35:35
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.88 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <cstring>
#define nmax 101

using namespace std;

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

short n,m,i,j,xj,yj,k;
short a[nmax][nmax];
string s;
queue <short> qji,qjj,qri,qrj;

void romeo(){
    
    while (!qri.empty()){
        
        i=qri.front(), j=qrj.front();
        
        qri.pop(), qrj.pop();
        
        int k=a[i][j];
        
        if (a[i-1][j-1]==-1)
            a[i-1][j-1]=k+1, qri.push(i-1), qrj.push(j-1);
        if (a[i-1][j]==-1)
            a[i-1][j]=k+1, qri.push(i-1), qrj.push(j);
        if (a[i-1][j+1]==-1)
            a[i-1][j+1]=k+1, qri.push(i-1), qrj.push(j+1);
        
        if (a[i][j-1]==-1)
            a[i][j-1]=k+1, qri.push(i), qrj.push(j-1);
        if (a[i][j+1]==-1)
            a[i][j+1]=k+1, qri.push(i), qrj.push(j+1);
        
        if (a[i+1][j-1]==-1)
            a[i+1][j-1]=k+1, qri.push(i+1), qrj.push(j-1);
        if (a[i+1][j]==-1)
            a[i+1][j]=k+1, qri.push(i+1), qrj.push(j);
        if (a[i+1][j+1]==-1)
            a[i+1][j+1]=k+1, qri.push(i+1), qrj.push(j+1);
    }
    
}

void read(){

    in >> n >> m;
    
    in.get();
    
    for (i=1; i<=n; i++){
        
        getline(in, s);
        
        k=0;
        
        for (j=0; j<m; j++){
            
            //cout << s[j] << " ";
            
            k++;
            
            if (s[j]=='R') a[i][k]=1, qri.push(i), qrj.push(k);
            else if (s[j]=='J') a[i][k]=1, qji.push(i), qjj.push(k);
            
            if (isspace(s[j])) a[i][k]=-1;
            
            if (s[j]=='X') a[i][k]=-2;
            
        }
        
        //cout << "\n";
        
    }
    
}


void julieta(){
    
    bool ok;
    
    while (!qji.empty()){
        
        i=qji.front(), j=qjj.front();
        
        qji.pop(), qjj.pop();
        
        int k=a[i][j];
        
        ok=0;
        
        if (a[i-1][j-1]>k){
            if (a[i-1][j-1]==k+1){
                out << k+1 << " " << i-1 << " " << j-1 << " " << "\n";
                break;
            }
            a[i-1][j-1]=k+1, qji.push(i-1), qjj.push(j-1);
        }
        if (a[i-1][j]>k){
            if (a[i-1][j]==k+1){
                out << k+1 << " " << i-1 << " " << j << " " << "\n";
                break;
            }
            a[i-1][j]=k+1, qji.push(i-1), qjj.push(j);
        }
        if (a[i-1][j+1]>k){
            if (a[i-1][j+1]==k+1){
                out << k+1 << " " << i-1 << " " << j+1 << " " << "\n";
                break;
            }
            a[i-1][j+1]=k+1, qji.push(i-1), qjj.push(j+1);
        }
        
        
        if (a[i][j-1]>k){
            if (a[i][j-1]==k+1){
                out << k+1 << " " << i << " " << j-1 << " " << "\n";
                break;
            }
            a[i][j-1]=k+1, qji.push(i), qjj.push(j-1);
        }
        if (a[i][j+1]>k){
            if (a[i][j-1]==k+1){
                out << k+1 << " " << i << " " << j-1 << " " << "\n";
                break;
            }
            a[i][j+1]=k+1, qji.push(i), qjj.push(j+1);
        }
        
        
        if (a[i+1][j-1]>k){
            if (a[i+1][j-1]==k+1){
                out << k+1 << " " << i+1 << " " << j-1 << " " << "\n";
                break;
            }
            a[i+1][j-1]=k+1, qji.push(i+1), qjj.push(j-1);
        }
        if (a[i+1][j]>k){
            if (a[i+1][j]==k+1){
                out << k+1 << " " << i+1 << " " << j << " " << "\n";
                break;
            }
            a[i+1][j]=k+1, qji.push(i+1), qjj.push(j);
        }
        if (a[i+1][j+1]>k){
            if (a[i+1][j+1]==k+1){
                out << k+1 << " " << i+1 << " " << j+1 << " " << "\n";
                break;
            }
            a[i+1][j+1]=k+1, qji.push(i+1), qjj.push(j+1);
        }
    }
    
}

int main(){
    
    read();
    
    romeo();
    
    julieta();
    
    return 0;
}