Cod sursa(job #996788)

Utilizator TudorMTudor Moldovanu TudorM Data 12 septembrie 2013 17:20:22
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include<cstdio>
using namespace std;
int a[101][101], b[101][101], n, m, xr, yr, xj, yj, mini;
char h;
struct{int x, y;}c[10004];
int dx[]={-1,-1,-1,0,0,1,1,1};
int dy[]={-1,0,1,1,-1,1,0,-1};

void citire()
{
    int i, j;
    FILE *f=fopen("rj.in","r");
    fscanf(f,"%d %d",&n,&m);
    fscanf(f,"%c",&h);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fscanf(f,"%c",&h);
            if(h=='X')a[i][j]=b[i][j]=-1;
            else if(h==' ')a[i][j]=b[i][j]=0;
            else if(h=='J')
            {
                a[i][j]=b[i][j]=0;
                xj=i;
                yj=j;
            }
            else
            {
                a[i][j]=b[i][j]=0;
                xr=i;
                yr=j;
            }
        }
        fscanf(f,"%c",&h);
    }
    fclose(f);
}
int interior(int x, int y)
{
    if(x>=1&&x<=n&&y>=1&&y<=m)return 1;
    return 0;
}

void lee(int a[101][101],int x, int y)
{
    int i, j, p, u, xv, yv;
    p=u=1;
    c[u].x=x;
    c[u].y=y;
    a[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)&&a[xv][yv]==0)
            {
                a[xv][yv]=a[x][y]+1;
                c[++u].x=xv;
                c[u].y=yv;
            }
        }
    }
}
int main()
{
    FILE *g=fopen("rj.out","w");
    int i, j, x, y;
    citire();
    lee(a,xr,yr);
    lee(b,xj,yj);
    mini=10000000;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(a[i][j]==b[i][j]&&mini>a[i][j]&&a[i][j]>0)
            {
                mini=a[i][j];
                x=i;
                y=j;
            }
        }
    }
    fprintf(g,"%d %d %d",mini,x,y);
    return 0;
}