Cod sursa(job #1418764)

Utilizator conradCondrea Radu conrad Data 13 aprilie 2015 22:22:07
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int i,j,n,m,rx,ry,jx,jy,q[100][100],x,y,tmin,o,p,w;
char a[100];
void afisare(){
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)
            g<<q[i][j]<<" ";
        g<<'\n';
    }
}
void citire(){
    f.get();
    for(i=1;i<=n;i++){
        f.get(a,100);
        for(j=0;j<m;j++)
            if(a[j]=='X')
                q[i][j+1]=1;
            else{
                q[i][j+1]=n*m;
                if(a[j]=='R'){
                    rx=i;
                    ry=j+1;
                }
                if(a[j]=='J'){
                    jx=i;
                    jy=j+1;
                }
            }
        f.get();
    }
}
void lee(int x,int y,int k){
   if(x>1 && q[x-1][y]>k+1){
      q[x-1][y]=k+1;
      lee(x-1,y,k+1);
   }
   if(x<n && q[x+1][y]>k+1){
      q[x+1][y]=k+1;
      lee(x+1,y,k+1);
   }
   if(y>1 && q[x][y-1]>k+1){
      q[x][y-1]=k+1;
      lee(x,y-1,k+1);
   }
   if(y<m && q[x][y+1]>k+1){
      q[x][y+1]=k+1;
      lee(x,y+1,k+1);
   }
}
int cautare(int x, int y, int k){
    if(x>1 && q[x-1][y]==k-1){
        if(k-1==w){
            o=x-1;p=y;
            return 0;
        }
        else
            cautare(x-1,y,k-1);
    }
    if(x<n && q[x+1][y]==k-1){
        if(k-1==w){
            o=x+1;p=y;
            return 0;
        }
        else
            cautare(x+1,y,k-1);
    }
    if(y>1 && q[x][y-1]==k-1){
        if(k-1==w){
            o=x;p=y-1;
            return 0;
        }
        else
            cautare(x,y-1,k-1);
    }
    if(y<m && q[x][y+1]==k-1){
        if(k-1==w){
            o=x;p=y+1;
            return 0;
        }
        else
            cautare(x,y+1,k-1);
    }
    return 0;
}
int main(){
    f>>n>>m;
    citire();
    x=rx;
    y=ry;
    q[x][y]=2;
    lee(x,y,2);
    tmin=(q[jx][jy]-2)/2+1;
    int k=q[jx][jy];
    w=tmin+2;
    cautare(jx,jy,k);
    g<<o<<" "<<p<<" "<<tmin;
    f.close();
    g.close();
    return 0;
}