Cod sursa(job #938029)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 11 aprilie 2013 17:23:06
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.52 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);
        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);
        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]=-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++)
            if(a[i][j]==b[i][j])
            {
                if(a[i][j]<tmin)
                    {tmin=a[i][j];imin=i,jmin=j;}
                else
                    if(a[i][j]==tmin)
                        if(i < imin)
                        {
                            imin=i;
                            jmin=j;
                        }
                        else
                            if(i==imin)
                            {
                                if(jmin>j)
                                    jmin=j;
                            }
            }
    fprintf(g,"%d %d %d",tmin-1,imin,jmin);
    return 0;
}