Cod sursa(job #1518391)

Utilizator gavrisraulRaul Gavris gavrisraul Data 5 noiembrie 2015 21:23:10
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include<fstream>
#include<queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

int n,m,romeo[101][101],julieta[101][101];
int axaOx[]={-1,-1,0,1,1,1,0,-1};
int axaOy[]={0,1,1,1,0,-1,-1,-1};
char Map[101][101];
pair <int, int> promeo,pjulieta,Final;
void full(int sizze[101][101])
{
    int i,j;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            sizze[i][j]=n*m;
}
void lee(int sizze[101][101],int x,int y)
{
    int k,i,j;
    queue < pair<int, int> > q;
    q.push(make_pair(x,y));
    sizze[x][y]=0;
    while(q.size()>0)
    {
        x=q.front().first;
        y=q.front().second;
        q.pop();
        for(k=0;k<8;k++)
        {
            i=x+ axaOx[k];
            j=y+ axaOy[k];
            if(i>=0 && i<n && j>=0 && j<m && Map[i][j]!='X' && sizze[i][j]==n*m)
            {
                sizze[i][j]=sizze[x][y]+1;
                q.push(make_pair(i,j));
            }
        }
    }
}
int main()
{
    int i,j;
    fin>>n>>m;
    for(i=0;i<n;i++) fin.getline(Map[i],105);
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
        {
            if(Map[i][j]=='R')
                promeo=make_pair(i,j);
            if(Map[i][j]=='J')
                pjulieta=make_pair(i,j);
        }
    full(romeo);
    full(julieta);
    lee(romeo,promeo.first,promeo.second);
    lee(julieta,pjulieta.first,pjulieta.second);
    int Min=n*m;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
        {
            if(romeo[i][j]==julieta[i][j] && romeo[i][j]<Min) { Min=romeo[i][j]; Final=make_pair(i,j); }
        }
    fout<<Min+2<<Final.second+2<<Final.first+2;
    return 0;
}