Cod sursa(job #1125113)

Utilizator TudorMTudor Moldovanu TudorM Data 26 februarie 2014 15:45:51
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include<cstdio>
#include<iostream>
using namespace std;
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");
int a[101][101], b1[101][101], b2[101][101],n,m, dx[]={-1,-1,-1,0,1,1,1,0}, dy[]={-1,0,1,1,1,0,-1,-1},xr,yr,xj,yj, mini=1000000,xm,ym;
char d;
struct{int x,y;}c[20000];
int interior(int x,int y)
{
    if(x<=n&&x>=1&&y<=m&&y>=1)return 1;
    return 0;
}
void citire()
{
    int i, j;
    fscanf(f,"%d %d",&n,&m);
    for(i=1;i<=n;i++)
    {
        fscanf(f,"\n");
        for(j=1;j<=m;j++)
        {
            fscanf(f,"%c",&d);
            if(d==' ')a[i][j]=0;
            else if(d=='X')a[i][j]=-1;
            else if(d=='R')
            {
                a[i][j]=0;
                xr=i;
                yr=j;
            }
            else
            {
                a[i][j]=0;
                xj=i;
                yj=j;
            }
        }
    }
}
void lee(int x, int y, int b[101][101])
{
    int xv, yv, p, u, i;
    u=p=1;
    c[u].x=x;
    c[u].y=y;
    b[x][y]=1;
    while(p<=u)
    {
        x=c[p].x;
        y=c[p++].y;
        for(i=0;i<=7;i++)
        {
            xv=x+dx[i];
            yv=y+dy[i];
            if(interior(xv,yv)&&b[xv][yv]==0&&a[xv][yv]!=-1)
            {
                b[xv][yv]=b[x][y]+1;
                c[++u].x=xv;
                c[u].y=yv;
            }
        }
    }
}
int main()
{
    int i, j;
    citire();
    lee(xr,yr,b1);
    lee(xj,yj,b2);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(b1[i][j]==b2[i][j]&&b2[i][j]<mini&&b2[i][j])
            {
                mini=b1[i][j];
                xm=i;
                ym=j;
            }
        }
    }
    /*for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)cout<<b1[i][j]<<" ";
        cout<<'\n';
    }*/
    fprintf(g,"%d %d %d",mini,xm,ym);
    fclose(f);
    fclose(g);
    return 0;
}