Cod sursa(job #1125104)

Utilizator alexandru_BPHMihalache Alexandru alexandru_BPH Data 26 februarie 2014 15:42:14
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <stdio.h>
#include <iostream>
#include <string.h>

using namespace std;
int n,m,i=1,j=1,inc,sf,k,minimum=5000;
char c,t[5];

struct matrice
{ int r,j;
}a[100][100];




struct punct
{
    short x,y;
}ro,ju,p;

const int di[]={-1,0,1,0,-1,1,-1,1};
const int dj[]={0,1,0,-1,-1,1,1,-1};
void bordare()
{
    for(i=0;i<=n+1;i++)
        a[i][0].r=a[i][0].j=a[i][n+1].r=a[i][n+1].j=-1;
    for(i=0;i<=m;i++)
        a[0][i].j=a[0][i].r=a[m+1][i].r=a[m+1][i].j=-1;
}
struct coada
{
   int l,c,d;
}cd[50],x,y;
void lee1()
{

   inc=sf=1;

   x.l=ro.x;
   x.c=ro.y;
   x.d=0;

   cd[inc]=x;

   while(inc<=sf)
   {
      x=cd[inc];

      for(k=0;k<8;k++)
      {
         y.l=x.l+di[k];
         y.c=x.c+dj[k];
         if(a[y.l][y.c].r==0)
         {
            y.d=x.d+1;
            a[y.l][y.c].r=y.d;
            cd[++sf]=y;
         }
      }
      inc++;
   }
}

void lee2()
{   inc=sf=1;
    x.l=ju.x;
    x.c=ju.y;
    x.d=0;
    cd[inc]=x;
    while(inc<=sf)
        {x=cd[inc];
        for(k=0;k<8;k++)
            {y.l=x.l+di[k];
             y.c=x.c+dj[k];
             if(a[y.l][y.c].j==0)
                {y.d=x.d+1;
                 a[y.l][y.c].j=y.d;
                 cd[++sf]=y;
                }
            }
        inc++;
        }
}
int main()
{
    FILE *f=fopen("rj.in","r");
    fscanf(f,"%d%d",&m,&n);
    fgets(t,5,f);
    while(!feof(f))
        {fscanf(f,"%c",&c);
        if(c=='R'||c=='J')
            {a[i][j].r=a[i][j++].j=-2;
            if(c=='R')
                {ro.x=i;ro.y=j-1;}
            if(c=='J')
                {ju.x=i;ju.y=j-1;}}
        else
        if(c=='X')
            a[i][j].r=a[i][j++].j=-1;
        else
            if(c==' ')
                j++;
        else
        if(c=='\n')
            {i++;j=1;}}
    fclose(f);
    bordare();

    lee1();
    lee2();
    for(i=0;i<=n+1;i++)
        {for(j=0;j<=m+1;j++)
            if(a[i][j].r>0&&a[i][j].r==(a[i][j].r+a[i][j].j)/2)
                if(a[i][j].r<minimum)
                {minimum=a[i][j].r;p.x=i;p.y=j;}}

    FILE *g=fopen("rj.out","w");
    fprintf(g,"%d %d %d\n",minimum+1,p.x,p.y);
    fclose(g);

    return 0;
}