Cod sursa(job #1051254)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 9 decembrie 2013 21:11:10
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.89 kb
#include <iostream>
#include <fstream>
#include <queue>
#define nmax 101

using namespace std;

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

short n,m,i,j,k,d,c,e;
short a[nmax][nmax];
bool ok=true;
char x;
queue <short> qi,qj;

void rj(){
    while (!qi.empty()){
        i=qi.front(), j=qj.front();
        qi.pop(), qj.pop();
        
        d=a[i][j];
        
        if (a[i-1][j-1]==-1 || a[i-1][j-1]>d){
            if (a[i-1][j-1]==d+1 && d+1<=k && c==0){
                if (i-1<=n){
                    if (i-1==n){
                        if (j-1<m) m=j-1,k=a[n][m];
                    } else n=i-1, m=j-1,k=a[n][m];
                }
            }
            a[i-1][j-1]=d+1, qi.push(i-1), qj.push(j-1);
        }
        if (a[i-1][j]==-1 || a[i-1][j]>d ){
            if (a[i-1][j]==d+1 && d+1<=k && c==0){
                if (i-1<=n){
                    if (i-1==n){
                        if (j<m) m=j,k=a[n][m];
                    } else n=i-1, m=j,k=a[n][m];
                }
            }
            
            a[i-1][j]=d+1, qi.push(i-1), qj.push(j);
        }
        if (a[i-1][j+1]==-1 || a[i-1][j+1]>d){
            if (a[i-1][j+1]==d+1 && d+1<=k && c==0){
                if (i-1<=n){
                    if (i-1==n){
                        if (j+1<m) m=j+1,k=a[n][m];
                    } else n=i-1, m=j+1,k=a[n][m];
                }
            }
            a[i-1][j+1]=d+1, qi.push(i-1), qj.push(j+1);
        }
        if (a[i][j-1]==-1 || a[i][j-1]>d){
            if (a[i][j-1]==d+1 && d+1<=k && c==0){
                if (i<=n){
                    if (i==n){
                        if (j-1<m) m=j-1,k=a[n][m];
                    } else n=i, m=j-1,k=a[n][m];
                }
            }
            a[i][j-1]=d+1, qi.push(i), qj.push(j-1);
        }
        if (a[i][j+1]==-1 || a[i][j+1]>d){
            if (a[i][j+1]==d+1 && d+1<=k && c==0){
                if (i<=n){
                    if (i==n){
                        if (j+1<m) m=j+1,k=a[n][m];
                    } else n=i, m=j+1,k=a[n][m];
                }
            }
            a[i][j+1]=d+1, qi.push(i), qj.push(j+1);
        }
        if (a[i+1][j-1]==-1 || a[i+1][j-1]>d){
            if (a[i+1][j-1]==d+1 && d+1<=k && c==0){
                if (i+1<=n){
                    if (i+1==n){
                        if (j-1<m) m=j-1,k=a[n][m];
                    } else n=i+1, m=j-1,k=a[n][m];
                }
            }
            a[i+1][j-1]=d+1, qi.push(i+1), qj.push(j-1);
        }
        if (a[i+1][j]==-1 || a[i+1][j]>d){
            if (a[i+1][j]==d+1 && d+1<=k && c==0){
                if (i+1<=n){
                    if (i+1==n){
                        if (j<m) m=j,k=a[n][m];
                    } else n=i+1, m=j,k=a[n][m];
                }
            }
            a[i+1][j]=d+1, qi.push(i+1), qj.push(j);
        }
        if (a[i+1][j+1]==-1 || a[i+1][j+1]>d){
            if (a[i+1][j+1]==d+1 && d+1<=k && c==0){
                if (i+1<=n){
                    if (i+1==n){
                        if (j+1<m) m=j+1,k=a[n][m];
                    } else n=i+1, m=j+1,k=a[n][m];
                }
            }
            a[i+1][j+1]=d+1, qi.push(i+1), qj.push(j+1);
        }
        
        
        if(qi.empty() && ok){
            qi.push(c);
            c=0;
            qj.push(e);
            ok=false;
        }
        
    }
}

void read(){
    in >> n >> m;
    
    for (i=1; i<=n; i++){
        in.get();
        for (j=1; j<=m; j++){
            in.get(x);
            if (x=='R'){
                a[i][j]=1;
                qi.push(i), qj.push(j);
            } else if (x=='J') a[i][j]=1, c=i, e=j;
            
            if (isspace(x)) a[i][j]=-1;
            if (x=='X') a[i][j]=-2;
            if (a[i][j]==0) a[i][j]=-1;
        }
    }
    
    n=nmax; // iminim
    m=nmax;    // jminim
    k=nmax*nmax; // valmin
}

int main(){
    read();
    rj();
    out<<k<<" "<<n<<" "<<m<<"\n";
    return 0;
}