Cod sursa(job #1418976)

Utilizator conradCondrea Radu conrad Data 14 aprilie 2015 15:03:52
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.26 kb
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int i,j,n,m,rx,ry,jx,jy,q[102][102],o,p,w[102][102],r,dif=2,x,y,k;
char a[100];
void afisare(int e[102][102]){
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)
            g<<e[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;
                w[i][j+1]=1;
            }
            else{
                q[i][j+1]=r;
                w[i][j+1]=r;
                if(a[j]=='R'){
                    rx=i;
                    ry=j+1;
                }
                if(a[j]=='J'){
                    jx=i;
                    jy=j+1;
                }
            }
        f.get();
    }
}
void lee(int e[102][102],int x,int y,int k){
   if(x>1 && e[x-1][y]>k+1){
      e[x-1][y]=k+1;
      lee(e,x-1,y,k+1);
   }
   if(x<n && e[x+1][y]>k+1){
      e[x+1][y]=k+1;
      lee(e,x+1,y,k+1);
   }
   if(y>1 && e[x][y-1]>k+1){
      e[x][y-1]=k+1;
      lee(e,x,y-1,k+1);
   }
   if(y<m && e[x][y+1]>k+1){
      e[x][y+1]=k+1;
      lee(e,x,y+1,k+1);
   }
}
void cautare(){
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(abs(q[i][j]-w[i][j])<=dif && q[i][j]!=1 && q[i][j]!=r){
                if(q[i][j]-w[i][j]==dif){
                    if(i<x){
                        x=i;
                        y=j;
                        k=q[i][j]-2;
                        dif=abs(q[i][j]-w[i][j]);
                        }
                    if(i==x)
                        if(j<=y){
                        x=i;
                        y=j;
                        k=q[i][j]-2;
                        dif=abs(q[i][j]-w[i][j]);
                        }
                }
                else{
                    x=i;
                    y=j;
                    k=q[i][j]-2;
                    dif=abs(q[i][j]-w[i][j]);
                }
            }
    g<<x<<" "<<y<<" "<<k;
}
int main(){
    f>>n>>m;
    r=n*m;
    citire();
    q[rx][ry]=2;
    lee(q,rx,ry,2);
    w[jx][jy]=2;
    lee(w,jx,jy,2);
    cautare();
    f.close();
    g.close();
    return 0;
}