Cod sursa(job #938055)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 11 aprilie 2013 17:55:06
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.47 kb
#include <stdio.h>

using namespace std;
int tabla [102][102],n,icrt,jcrt,uq,pq,k,tabla2[102][102],uq2,pq2,m;
struct queue{int i,j;}q[20000],q2[20000];
void sari(int icrt, int jcrt, int k)
{
    if(icrt>0&&icrt<=n&&jcrt>0&&jcrt<=m&&tabla[icrt][jcrt]==0)
       {
           tabla[icrt][jcrt]=k+1;
           q[++uq].i=icrt;
           q[uq].j=jcrt;
       }

}
void sari2(int icrt,int jcrt, int k)
{
    if(icrt>0&&icrt<=n&&jcrt>0&&jcrt<=m&&tabla2[icrt][jcrt]==0)
       {
           tabla2[icrt][jcrt]=k+1;
           q2[++uq2].i=icrt;
           q2[uq2].j=jcrt;
       }

}

int main()
{
    FILE *f=fopen("rj.in","r");
    int ii,ji,ifi,jfi;
    char c;
    fscanf(f,"%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    {fscanf(f,"%c",&c);
     while(c=='\n')
     fscanf(f,"%c",&c);
     if(c=='X')
     tabla[i][j]=tabla2[i][j]=-1;
     else
     if(c=='R')
     {
         ii=i;
         ji=j;
     }
     else
     if(c=='J')
     {
         ifi=i;
         jfi=j;
     }
    }

    tabla[ii][ji]=1;
    pq=uq=1;
    q[1].i=ii;
    q[1].j=ji;
    k=tabla[ii][ji];
    while(pq<=uq)

    {
    ii=q[pq].i;
    ji=q[pq].j;
    k=tabla[ii][ji];
        sari(ii+1,ji,k);
        sari(ii,ji+1,k);
        sari(ii-1,ji,k);
        sari(ii,ji-1,k);
        sari(ii+1,ji+1,k);
        sari(ii+1,ji-1,k);
        sari(ii-1,ji-1,k);
        sari(ii-1,ji+1,k);
    pq++;
    k++;

    }
    pq2=uq2=1;
    q2[1].i=ifi;
    q2[1].j=jfi;
    tabla2[ifi][jfi]=1;
    k=tabla2[ifi][jfi];
    while(pq2<=uq2)
    {
    ifi=q2[pq2].i;
    jfi=q2[pq2].j;
    k=tabla2[ifi][jfi];
        sari2(ifi+1,jfi,k);
        sari2(ifi,jfi+1,k);
        sari2(ifi-1,jfi,k);
        sari2(ifi,jfi-1,k);
        sari2(ifi+1,jfi+1,k);
        sari2(ifi+1,jfi-1,k);
        sari2(ifi-1,jfi-1,k);
        sari2(ifi-1,jfi+1,k);
    pq2++;
    k++;

    }
  /* for(int i=1;i<=n;i++)
    {for(int j=1;j<=m;j++)
    printf("%3d",tabla[i][j]);
    printf("\n");}
    printf("\n");
    for(int i=1;i<=n;i++)
    {for(int j=1;j<=m;j++)
    printf("%3d",tabla2[i][j]);
    printf("\n");}
*/
    int imin=999999,jmin=99999999,tmin=99999999;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    if(tabla[i][j]==tabla2[i][j]&&tabla[i][j]!=-1&&tabla[i][j]!=0)
    if(tabla[i][j]<tmin)
    {tmin=tabla[i][j];
    imin=i;
    jmin=j;
    }
    f=fopen("rj.out","w");
    fprintf(f,"%d %d %d\n",tmin,imin,jmin);
    return 0;
}