Cod sursa(job #1502507)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 14 octombrie 2015 18:53:38
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 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,0,1,0,-1,-1,1,1};
int d2[8]={0,1,0,-1,-1,1,1,-1};
void lee(int x1,int y1,int v[105][105],int n,int m)
{
    q[1].x=x1;
    q[1].y=y1;
    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;
                    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=0,i=0;
    char c;
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d%d\n",&n,&m);
    while(c!='\n'&&c!=EOF){
        while(c!='\n'&&c!=EOF)
        {
            scanf("%c",&c);
            if(c==' ')
                v1[i][j]=v2[i][j]=0;
            if(c=='X')
                v1[i][j]=v2[i][j]=-1;
            if(c=='R')
            {
                x1=i;y1=j;
            }
            if(c=='J')
            {
                x2=i;y2=j;
            }
            printf("%c",c);
            ++j;
        }
        //scanf("%c",&c);
        //printf("\n");
        ++i;
    }
    for(i=0;i<n;++i){
        for(j=0;j<m;++j)
            printf("%d ",v1[i][j]);
        printf("\n");
    }
    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]>-1)
            {
                min=v1[i][j];pi=i;pj=j;
            }
    printf("%d %d %d",min,pi,pj);
    return 0;
}