Cod sursa(job #1300994)

Utilizator VictoriaNevTascau Victoria VictoriaNev Data 25 decembrie 2014 14:03:25
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define NMAX 105
using namespace std;
int r[NMAX][NMAX], ju[NMAX][NMAX], ma[NMAX][NMAX], n, m, i, j, lr, cr, lj, cj, l, c, minim=1<<20;
char s[NMAX], ccc;
int d[8][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}};
void BFS(int dist[NMAX][NMAX], int l, int c)
{
    int p, ll, cc, linie[NMAX*NMAX], col[NMAX*NMAX], st=0, sf=1;
    linie[0]=l;
    col[0]=c;
    dist[l][c] = 1;
    while(st<sf)
    {
        for(p=0; p<8; p++)
        {
            ll=linie[st]+d[p][0],cc=col[st]+d[p][1];
            if(ll>=0&&ll<n&&cc>=0&&cc<m)
                if(ma[ll][cc]==0&&dist[ll][cc]==0)
                {
                    dist[ll][cc]=dist[linie[st]][col[st]]+1;
                    linie[sf]=ll;
                    col[sf]=cc;
                    sf++;
                }
        }
        st++;
    }
}
int main()
{
    ifstream f("rj.in");
    ofstream cout("rj.out");
    f>>n>>m;
    f.get(ccc);
    for(i=0; i<n; i++)
    {
        f.getline(s,150,'\n');
        for(j=0; j<m; j++)
            if(s[j]==' ')
                ma[i][j]=0;
            else if(s[j]=='X')
                ma[i][j]=1;
            else if(s[j]=='R')
                ma[i][j]=0,lr=i,cr=j;
            else if(s[j]=='J')
                ma[i][j]=0,lj=i,cj=j;
            else
                ma[i][j]=0;
    }

    BFS(r,lr,cr);
    BFS(ju,lj,cj);

    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            if(r[i][j]==ju[i][j]&&ma[i][j]==0&&r[i][j]!=0)
                if(minim>r[i][j])
                    minim=r[i][j],l=i,c=j;
    cout<<minim<<' '<<l+1<<' '<<c+1;
    return 0;
}