Cod sursa(job #1213680)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 28 iulie 2014 19:26:53
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 kb
#include<fstream>
#include<iostream>
#define NMax 110
using namespace std;

short Dx[8] = {-1,-1,-1, 0, 1, 1, 1, 0};
short Dy[8] = {-1, 0, 1, 1, 1, 0,-1,-1};
int romeo[NMax][NMax],julieta[NMax][NMax],n,m,xr,yr,xj,yj;
char s[NMax];

struct Coada
{
    int x,y;
}C[NMax*NMax],p,v;

void Citire()
{int i,j;
    ifstream g("rj.in");
    g>>n>>m;
    g.get();
    for(i=1;i<=n;i++)
    {
        g.getline(s,110);
        for(j=0;j<m;j++)
            switch (s[j])
        {
            case ' ':romeo[i][j+1]=julieta[i][j+1]=0;break;
            case 'X':romeo[i][j+1]=julieta[i][j+1]=1;break;
            case 'R':romeo[i][j+1]=0;xr=i;yr=j+1;break;
            case 'J':julieta[i][j+1]=0;xj=i;yj=j+1;break;
        }
    }
}

void Bordare()
{
    for(int i=0;i<=m+1;i++)
        romeo[0][i]=romeo[n+1][i]=julieta[0][i]=julieta[n+1][i]=1;
    for(int i=0;i<=n+1;i++)
        romeo[i][0]=romeo[i][m+1]=julieta[i][0]=julieta[i][m+1]=1;
}

void Traseu_romeo(int x1,int y1)
{
    int prim,ultim,k;
    prim=ultim=0;
    C[0].x=x1,C[0].y=y1;
    romeo[x1][y1]=1;
    while(prim<=ultim)
    {
        p=C[prim],prim++;
        for(k=0;k<8;k++)
        {
            v.x=p.x+Dx[k],v.y=p.y+Dy[k];
            if(romeo[v.x][v.y]==0)
            {
                romeo[v.x][v.y]=romeo[p.x][p.y]+1;
                ultim++,C[ultim]=v;
            }
        }
    }
}

void Traseu_julieta(int x1,int y1)
{
    int prim,ultim,k;
    prim=ultim=0;
    C[0].x=x1,C[0].y=y1;
    julieta[x1][y1]=1;
    while(prim<=ultim)
    {
        p=C[prim],prim++;
        for(k=0;k<8;k++)
        {
            v.x=p.x+Dx[k],v.y=p.y+Dy[k];
            if(julieta[v.x][v.y]==0)
            {
                julieta[v.x][v.y]=julieta[p.x][p.y]+1;
                ultim++,C[ultim]=v;
            }
        }
    }
}

int main ()
{int i,j,tmin=999999,lin=0,col=0;
 Citire();
 Bordare();
 Traseu_romeo(xr,yr);
 Traseu_julieta(xj,yj);

 for(i=1;i<=n;i++)
 for(j=1;j<=m;j++)
 {
     if(romeo[i][j]==julieta[i][j]&&romeo[i][j]>1)
        if(romeo[i][j]<tmin)
     {
         tmin=romeo[i][j];
         lin=i;
         col=j;
     }
 }

ofstream f("rj.out");
f<<tmin<<' '<<lin<<' '<<col;

}