Cod sursa(job #153485)

Utilizator diana_sandrudienutza sandru diana_sandru Data 10 martie 2008 16:18:32
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.37 kb
#include<fstream.h>   
int r[102][102],f[102][102],n,xj,yj,xr,yr,m;   
char a[102][102];   
const int x[8]={-1,-1,-1,0,1,1,1,0};   
const int y[8]={-1,0,1,1,1,0,-1,-1};   
ifstream fin("rj.in");   
ofstream fout("rj.out");   
void citire(){   
    fin>>n>>m;   
    char c[105];      
    fin.getline (c,105);      
    for (int i=1;i<=n;i++){   
          fin.getline (c,105);      
          for (int j=0;j<m;j++){   
          a[i][j+1]=c[j];      
          if (c[j]=='R'){   
              xr=i;      
              yr=j+1;      
              a[i][j+1]=' ';      
          }      
          else     
              if (c[j]=='J'){   
              xj=i;      
              yj=j+1;      
              a[i][j+1]=' ';      
              }      
          }      
    }      
}   
void bordare(){   
    for(int i=0;i<=m+1;i++){   
        a[0][i]='X';   
        a[n+1][i]='X';   
        }   
  
    for(int i=0;i<=n+1;i++){   
        a[i][0]='X';   
        a[i][m+1]='X';   
        }   
}   
void lee(int b[102][102],int xb,int yb){   
    int x1[10000],y1[10000],nr=1;   
    x1[0]=xb;   
    y1[0]=yb;   
    b[xb][yb]=1;   
    for(int i=0;i<nr;i++)   
        for(int j=0;j<8;j++)   
            if(b[x1[i]+x[j]][y1[i]+y[j]]==0&&a[x1[i]+x[j]][y1[i]+y[j]]!='X'){   
                b[x1[i]+x[j]][y1[i]+y[j]]=b[x1[i]][y1[i]]+1;   
                x1[nr]=x1[i]+x[j];   
                y1[nr]=y1[i]+y[j];   
                nr++;   
            }   
}   
void minim(){   
    int min=10005,minl=10005,minc=10005;   
    for(int i=1;i<=n;i++)   
        for(int j=1;j<=m;j++)   
            if(r[i][j]==f[i][j]&&r[i][j]!=0){   
                if(r[i][j]<min){   
                    min=r[i][j];   
                    minl=i;   
                    minc=j;   
                }   
                if(r[i][j]==min&&minl>i){   
                    minl=i;   
                    minc=j;   
                }   
                if(r[i][j]==min&&minl==i&&minc>j){   
                    minl=i;   
                    minc=j;   
                }   
            }   
    fout<<min<<" "<<minl<<" "<<minc<<'\n';   
}   
void afisare(){   
    lee(f,xj,yj);   
    lee(r,xr,yr);   
    minim();   
}   
int main(){   
    citire();   
    bordare();   
    afisare();   
    fin.close();   
    fout.close();   
    return 0;   
}