Cod sursa(job #400505)

Utilizator mytzuskyMihai Morcov mytzusky Data 21 februarie 2010 15:04:57
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.42 kb
#include <fstream.h>

int n,m,j,ri,rj,ji,jj,nr;
int a[103][103],b[103][103];
char s[103];

using namespace std;

const int dx[8]={-1,-1,0,1,1,1,0,-1};
const int dy[8]={0,1,1,1,0,-1,-1,-1};

int cx[10000];
int cy[10000];

void citire(){
    ifstream f("rj.in");
    f>>n>>m;
    f.getline(s,103);
    for(int i=1;i<=n;i++)
           {
               f.getline(s,103);
               for(int j=0;j<m;j++)
                {
                    if(s[j]==' ')
                        {
                            a[i][j+1]=0;
                            b[i][j+1]=0;
                        }
                    if(s[j]=='X')
                        {
                            a[i][j+1]=-1;
                            b[i][j+1]=-1;
                        }
                    if(s[j]=='R')
                           {   ri=i; rj=j+1; }
                    if(s[j]=='J')
                           {   ji=i; jj=j+1; }
                }
           }
    f.close();
}

void bordare (int a[103][103]){
    for(int i=0;i<=m+1;i++)
      {
          a[0][i]=-1;
          a[n+1][i]=-1;
      }
    for(int i=0;i<=n+1;i++)
      {
          a[i][0]=-1;
          a[i][m+1]=-1;
      }
}

void lee (int x,int y,int a[103][103]) {
    cx[0]=x;
    cy[0]=y;
    nr=1;
    a[x][y]=1;
    int mac=0;
    for(int i=0; i<nr && mac==0 ;i++)
      for(int k=0;k<8;k++)
         if(a[cx[i]+dx[k]][cy[i]+dy[k]]==0)
              {
                  a[cx[i]+dx[k]][cy[i]+dy[k]]=a[cx[i]][cy[i]]+1;
                  cx[nr]=cx[i]+dx[k];
                  cy[nr]=cy[i]+dy[k];
                  nr++;
                  if(cx[i]+dx[k]==x && cy[i]+dy[k]==y)
                                mac=1;
              }
}

int main(){
    ofstream g("rj.out");
    citire();
    bordare (a); bordare (b);
    lee(ri, rj, a); lee(ji,jj,b);
    int minx=-1,miny=-1;
    int min=1000;
    for(int i=1;i<n;i++)
        for(int j=1;j<m;j++)
               if (a[i][j]==-1 || a[i][j]==0)
                  int s=0;
               else
                      if (a[i][j]==b[i][j])
                              if(a[i][j]<min)
                                 {
                                      min=a[i][j];
                                      minx=i;
                                      miny=j;
                                 }
    g<<min<<" "<<minx<<" "<<miny<<endl;

    g.close();
    return 0;
}