Cod sursa(job #744764)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 9 mai 2012 16:50:04
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
#include<cstdio>
#include<deque>
using namespace std;
typedef struct punct {int x,y;};
const int dir[]={-1,0,1};
void lee(int x,int y,int a[105][105])
{
    deque<punct> dq;
    punct aux;
    aux.x=x; aux.y=y;
    int i,j,n=1,pas=1,k,l;
    dq.push_back(aux);
    do
    {
        for(;n!=0;--n)
        {
            aux=dq.front();
            dq.pop_front();
            i=aux.x; j=aux.y;
            for(k=0;k<=2;k++)
            {
                for(l=0;l<=2;l++)
                {
                    if(!(dir[k]==0&&dir[l]==0))
                    {
                        if(a[i+dir[k]][j+dir[l]]==0)
                        {
                            a[i+dir[k]][j+dir[l]]=pas;
                            aux.x=i+dir[k];
                            aux.y=j+dir[l];
                            dq.push_back(aux);
                        }
                    }
                }
            }
        }
        pas++;
        n=dq.size();
    }
    while(n!=0);
}
int main()
{
    int R[105][105],J[105][105],i,j,rj,ri,ji,jj,n,m,min=100000,x,y;
    char c;
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d %d ",&n,&m);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            scanf("%c",&c);
            if(c=='R') {R[i][j]=-1; ri=i; rj=j;}
            else if(c=='J') {J[i][j]=-1; ji=i; jj=j;}
            else if(c=='X') {R[i][j]=-1; J[i][j]=-1;}
            else {R[i][j]=0; J[i][j]=0;}
            R[0][j]=-1; J[0][j]=-1;
            R[n+1][j]=-1; J[n+1][j]=-1;
        }
        scanf("%c",&c);
        R[i][0]=-1; J[i][0]=-1;
        R[i][m+1]=-1; J[i][m+1]=-1;
    }
    R[0][0]=-1; R[n+1][0]=-1; R[0][m+1]=-1; R[n+1][m+1]=-1;
    J[0][0]=-1; J[n+1][0]=-1; J[0][m+1]=-1; J[n+1][m+1]=-1;
    lee(ri,rj,R);
    lee(ji,jj,J);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(R[i][j]==J[i][j]&&R[i][j]>0)
            {
                if(min>R[i][j]) {min=R[i][j]; x=i; y=j;}
            }
        }
    }
    printf("%d %d %d\n",min+1,x,y);
    return 0;
}