Cod sursa(job #1691874)

Utilizator florin.elfusFlorin Elfus florin.elfus Data 19 aprilie 2016 17:56:15
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("rj.in");
ofstream fout("rj.out");
char love[150][150];
int rom[101][101],jul[101][101];
int n,m;
int vx[101*101],vy[101*101];
void distante(int x, int y, int mat[101][101])
{
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
            mat[i][j]=-1;
    mat[x][y]=0;
    int p,u;
    p=1;
    u=0;
    u++;
    vx[u]=x;
    vy[u]=y;
    int dx[8]={-1,0,1,0,-1,-1,+1,+1};
    int dy[8]={0,-1,0,1,-1,+1,-1,+1};
    while(p<=u)
    {
        int cx=vx[p], cy=vy[p];
        for(int i=0;i<=7;++i)
        {
            int cxnou,cynou;
            cxnou=cx+dx[i];
            cynou=cy+dy[i];
            if(love[cxnou][cynou]==' ' && mat[cxnou][cynou]==-1)
            {
                mat[cxnou][cynou]=mat[cx][cy] + 1;
                u++;
                vx[u]=cxnou;
                vy[u]=cynou;
            }
        }
        ++p;
    }



}

int main()
{
    f>>n>>m;
    int i, j;
    f.getline(love[0], m + 1);
    for(i=1;i<=n;++i)
        f.getline(love[i]+1,m+1);
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
    {
        if(love[i][j]=='R')
            distante(i,j,rom);
        if(love[i][j]=='J')
            distante(i,j,jul);

    }
    int dmin=n*m +1, rx,ry;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            if(rom[i][j] > 0 && rom[i][j]==jul[i][j])
                if(rom[i][j]<dmin)
    {
        dmin=rom[i][j];
        rx=i;
        ry=j;
    }
    fout<<dmin + 1<<" "<<rx<<" "<<ry;
    return 0;
}