Cod sursa(job #1050357)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 8 decembrie 2013 15:23:58
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.33 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,k,minimi=nmax,minimj=nmax,val;
short a[nmax][nmax];

string s;
queue <short> qi,qj;

void minimum(short x, short y, short z){

    if (a[x][y]==z){
            if (x<=minimi){
                if (x==minimi){
                    if (y<minimj) minimj=y, val=a[minimi][minimj];
                } else minimi=x, minimj=y, val=a[minimi][minimj];
            }
    }
    
}

void rj(){
    
    while (!qi.empty()){
        
        i=qi.front(), j=qj.front();
        
        qi.pop(), qj.pop();
        
        int k=a[i][j];
        
        if (a[i-1][j-1]==-1 || a[i-1][j-1]>k)
            minimum(i-1,j-1,k+1), a[i-1][j-1]=k+1, qi.push(i-1), qj.push(j-1);
        
        if (a[i-1][j]==-1 || a[i-1][j]>k)
            minimum(i-1,j,k+1), a[i-1][j]=k+1, qi.push(i-1), qj.push(j);
        
        if (a[i-1][j+1]==-1 || a[i-1][j+1]>k)
            minimum(i-1,j+1,k+1), a[i-1][j+1]=k+1, qi.push(i-1), qj.push(j+1);
            
        if (a[i][j-1]==-1 || a[i][j-1]>k)
            minimum(i,j-1,k+1), a[i][j-1]=k+1, qi.push(i), qj.push(j-1);
            
        if (a[i][j+1]==-1 || a[i][j+1]>k)
            minimum(i,j+1,k+1), a[i][j+1]=k+1, qi.push(i), qj.push(j+1);
        
        if (a[i+1][j-1]==-1 || a[i+1][j-1]>k)
            minimum(i+1,j-1,k+1), a[i+1][j-1]=k+1, qi.push(i+1), qj.push(j-1);
    
        if (a[i+1][j]==-1 || a[i+1][j]>k)
            minimum(i+1,j,k+1), a[i+1][j]=k+1, qi.push(i+1), qj.push(j);
        
        if (a[i+1][j+1]==-1 || a[i+1][j+1]>k)
            minimum(i+1,j+1,k+1), a[i+1][j+1]=k+1, qi.push(i+1), qj.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++){
            
            k++;
            
            if (s[j]=='R') a[i][k]=1, qi.push(i), qj.push(k);
            else if (s[j]=='J') a[i][k]=1, qi.push(i), qj.push(k);
            
            if (isspace(s[j])) a[i][k]=-1;
            
            if (s[j]=='X') a[i][k]=-2;
            
        }
        
    }
    
}

int main(){
    
    read();
    
    rj();

    out<<val<<" "<<minimi<<" "<<minimj<<"\n";
    
    return 0;
}