Cod sursa(job #1025171)

Utilizator danyro364Savu Ioan Daniel danyro364 Data 9 noiembrie 2013 16:13:15
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <stdio.h>
using namespace std;
FILE *f=fopen("rj.in","rt");
FILE *g=fopen("rj.out","wt");
int dr[101][101],dj[101][101],i,j,n,t,m1,k,ir,jr,ij,jj,v1,v2,imin,jmin,m;
int p1[]={-1,-1,-1,0,1,1,1,0};
int p2[]={-1,0,1,1,1,0,-1,-1};
struct ceva{int a,b;}c[10001];
char z;
int main()
{
    fscanf(f,"%d %d",&n,&m);fscanf(f,"%c",&z);
    for(i=1;i<=n;i++)
        {for(j=1;j<=m;j++)
    {
        fscanf(f,"%c",&z);
        if(z=='X')
            dr[i][j]=dj[i][j]=-1;
        else if(z=='R')
            {dr[i][j]=1;
            ir=i;
            jr=j;}
        else if(z=='J')
            {dj[i][j]=1;
            ij=i;
            jj=j;}
        else dj[i][j]=dr[i][j]=0;
    }fscanf(f,"%c",&z);}

    i=t=1;
    c[i].a=ir;
    c[i].b=jr;
    while(i<=t)
    {ir=c[i].a;
    jr=c[i].b;
        for(k=0;k<=7;k++)
        {
            v1=ir+p1[k];
            v2=jr+p2[k];
            if(v1>0&&v1<=n&&v2>0&&v2<=m&&dr[v1][v2]==0)
            {
                t++;
                c[t].a=v1;
                c[t].b=v2;
                dr[v1][v2]=dr[ir][jr]+1;
            }

        }
        ++i;

    }
    i=t=1;
    c[i].a=ij;
    c[i].b=jj;
    while(i<=t)
    {ij=c[i].a;
    jj=c[i].b;
        for(k=0;k<=7;k++)
        {
            v1=ij+p1[k];
            v2=jj+p2[k];
            if(v1>0&&v1<=n&&v2>0&&v2<=m&&dj[v1][v2]==0)
            {
                t++;
                c[t].a=v1;
                c[t].b=v2;
                dj[v1][v2]=dj[ij][jj]+1;
            }
        }
       ++i;
    }
    m1=32000;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(dr[i][j]==dj[i][j]&&dr[i][j]<m1&&dr[i][j]>0)
        {
            m1=dr[i][j];
            imin=i;
            jmin=j;
        }

    fprintf(g,"%d %d %d",m1,imin,jmin);
    fclose(f);
    fclose(g);
    return 0;
}