Cod sursa(job #938056)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 11 aprilie 2013 17:59:47
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.84 kb
#include <cstdio>
#include <queue>
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");
using namespace std;
struct coada
{
    queue<int>i;
    queue<int>j;
}qr,qj;
int a[105][105],b[105][105];
void saria(int i,int j,int k)
{
    a[i][j]=k+1;
    qr.i.push(i);
    qr.j.push(j);
}
void faleea()
{
    int i,j,k;
    while(qr.i.empty()==0)
    {
        i=qr.i.front();
        j=qr.j.front();
        k=a[i][j];
        if(a[i+1][j]==0)
            saria(i+1,j,k);
        if(a[i-1][j]==0)
            saria(i-1,j,k);
        if(a[i][j+1]==0)
            saria(i,j+1,k);
        if(a[i][j-1]==0)
            saria(i,j-1,k);
        if(a[i-1][j-1]==0)
            saria(i-1,j-1,k);
        if(a[i-1][j+1]==0)
            saria(i-1,j+1,k);
        if(a[i+1][j-1]==0)
            saria(i+1,j-1,k);
        if(a[i+1][j+1]==0)
            saria(i+1,j+1,k);
        qr.i.pop();
        qr.j.pop();
    }

}
void sarib(int i,int j,int k)
{
    b[i][j]=k+1;
    qj.i.push(i);
    qj.j.push(j);
}
void faleeb()
{
    int i,j,k;
    while(qj.i.empty()==0)
    {
        i=qj.i.front();
        j=qj.j.front();
        k=b[i][j];
        if(b[i+1][j]==0)
            sarib(i+1,j,k);
        if(b[i-1][j]==0)
            sarib(i-1,j,k);
        if(b[i][j+1]==0)
            sarib(i,j+1,k);
        if(b[i][j-1]==0)
            sarib(i,j-1,k);
        if(b[i-1][j-1]==0)
            sarib(i-1,j-1,k);
        if(b[i-1][j+1]==0)
            sarib(i-1,j+1,k);
        if(b[i+1][j-1]==0)
            sarib(i+1,j-1,k);
        if(b[i+1][j+1]==0)
            sarib(i+1,j+1,k);
        qj.i.pop();
        qj.j.pop();
    }

}
int main()
{
    int n,m,i,j;
    char c;
    fscanf(f,"%d%d",&n,&m);
    for(i=0;i<=n+1;i++)a[i][0]=a[i][m+1]=-2,b[i][0]=b[i][m+1]=-2;
    for(i=0;i<=m+1;i++)a[0][i]=a[n+1][i]=-2,b[0][i]=b[n+1][i]=-2;
    c=fgetc(f);
    for(i=1;i<=n;i++)
    {
        while(c=='\n')c=fgetc(f);
        for(j=1;j<=m;j++)
            {
                if(c=='X')a[i][j]=b[i][j]=-1;
                if(c=='R'){qr.i.push(i),qr.j.push(j);a[i][j]=1;}//romeo -> a
                if(c=='J'){qj.i.push(i),qj.j.push(j);b[i][j]=1;}//july -> b
                c=fgetc(f);
            }
    }
    faleea();
    faleeb();
    int tmin=999999,imin=0,jmin=0;
    for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
                printf("%3d",a[i][j]);
            printf("\n");
        }
    printf("\n\n");
    for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
                printf("%3d",b[i][j]);
            printf("\n");
        }

    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j]&&a[i][j]!=-1&&a[i][j]!=0)
                if(a[i][j]<tmin)
                    {tmin=a[i][j];imin=i,jmin=j;}
    fprintf(g,"%d %d %d",tmin,imin,jmin);
    return 0;
}