Cod sursa(job #1502510)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 14 octombrie 2015 18:56:59
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <cstdio>
using namespace std;
struct Pozitie
{
    int x,y;
};
Pozitie q[175*175+5];
int v1[105][105],v2[105][105];
int d1[8]={-1,-1,0,1,1,1,0,-1};
int d2[8]={0,1,1,1,0,-1,-1,-1};
char a[105];
void lee(int x,int y,int v[105][105],int n,int m)
{
    q[1].x=x;
    q[1].y=y;
    int p=1,u=2,i;
    while(p<u)
    {
        for(i=0;i<8;++i){
            if(v[q[p].x+d1[i]][q[p].y+d2[i]]==0)
                if(q[p].y+d2[i]>=0&&q[p].y+d2[i]<m&&q[p].x+d1[i]>=0&&q[p].x+d1[i]<n){
                    v[q[p].x+d1[i]][q[p].y+d2[i]]=v[q[p].x][q[p].y]+1;
                    //printf("%d %d %d %d %d %d %d\n",v[q[p].x+d1[i]][q[p].y+d2[i]],q[p].x+d1[i],q[p].y+d2[i],v[q[p].x][q[p].y],q[p].x,q[p].y,v[q[p].x][q[p].y]+1);
                    q[u].x=q[p].x+d1[i];q[u].y=q[p].y+d2[i];
                    ++u;
                }
        }
        ++p;
    }
}

int main()
{
    int n,m,x,y,x1,x2,y1,y2,j,i;
    char c;
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d%d\n",&n,&m);
    for(i=0;i<n;++i){
        j=0;
        scanf("%c",&a[j]);
        while(a[j]!='\n')
        {
            ++j;
            scanf("%c",&a[j]);
        }
        for(j=0;j<m;++j)
        {
            if(a[j]=='X')
            {
                v1[i][j]=v2[i][j]=-1;
            }
            if(a[j]=='R')
            {
                x1=i;y1=j;
                v1[i][j]=1;
            }
            if(a[j]=='J')
            {
                x2=i;y2=j;
                v2[i][j]=1;
            }
        }
    }
    lee(x1,y1,v1,n,m);
    lee(x2,y2,v2,n,m);
    int min=1000000,pi=-1,pj=-1;
    for(i=0;i<n;++i)
        for(j=0;j<m;++j)
            if(v1[i][j]==v2[i][j]&&v1[i][j]<min&&v1[i][j]>0)
            {
                min=v1[i][j];pi=i;pj=j;
            }
    printf("%d %d %d",min,pi+1,pj+1);
    return 0;
}