Cod sursa(job #1602870)

Utilizator eusebiu_gageaGagea Eusebiu-Andrei eusebiu_gagea Data 16 februarie 2016 22:59:00
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.27 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct Per{int x,y;};
queue<Per>c;
int n,m,a[102][102],r[102][102],j[102][102],mini=10000;
Per zr,zj,z,z1,z2;
int dx[8]={-1,-1,-1,0,1,1,1,0};
int dy[8]={-1,0,1,1,1,0,-1,-1};

void afis_matrix(int a[101][101])
{
    int i,j;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
            g<<a[i][j]<<' ';
        g<<'\n';
    }
    g<<'\n';
}

void Citire()
{
    int i,j;
    char sir[102];
    f>>n>>m;
    f.get();
    for(i=1; i<=n; i++)
    {
        f.getline(sir,101);
        for(j=1; j<=m; j++)
        {
            if(sir[j-1]=='R')
            {
                z.x=i;
                z.y=j;
                zr=z;
            }
            if(sir[j-1]=='J')
            {
                z.x=i;
                z.y=j;
                zj=z;
            }
            if(sir[j-1]=='X')
                a[i][j]=-1;
        }
    }
}

void Lee_r(int x, int y, int b[102][102])
{
    int k;
    b[x][y]=1;
    z.x=x;
    z.y=y;
    c.push(z);
    while(!c.empty())
    {
        z1=c.front();
        c.pop();
        for(k=0; k<8; k++)
        {
            z2.x=z1.x+dx[k];
            z2.y=z1.y+dy[k];
            if(!a[z2.x][z2.y] && !b[z2.x][z2.y])
            {
                b[z2.x][z2.y]=b[z1.x][z1.y]+1;
                c.push(z2);
            }
        }
    }
}

void Lee_j(int x, int y, int b[102][102])
{
    int k;
    b[x][y]=1;
    z.x=x;
    z.y=y;
    c.push(z);
    while(!c.empty())
    {
        z1=c.front();
        c.pop();
        for(k=0; k<8; k++)
        {
            z2.x=z1.x+dx[k];
            z2.y=z1.y+dy[k];
            if(!a[z2.x][z2.y] && !b[z2.x][z2.y])
            {
                b[z2.x][z2.y]=b[z1.x][z1.y]+1;
                if(b[z2.x][z2.y]==r[z2.x][z2.y])
                    if(b[z2.x][z2.y]<mini)
                    {
                        mini=b[z2.x][z2.y];
                        z.x=z2.x;
                        z.y=z2.y;
                    }
                c.push(z2);
            }
        }
    }
}

int main()
{
    Citire();
    Lee_r(zr.x,zr.y,r);
    Lee_j(zj.x,zj.y,j);
    g<<mini<<' '<<z.x<<' '<<z.y<<'\n';
    return 0;
}