Cod sursa(job #1691994)

Utilizator codi22FMI Condrea Florin codi22 Data 19 aprilie 2016 22:23:34
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <iostream>
#include <cstdio>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int j,M[200][200],x,y,n,m,i,mnx=101*101,mny=101*101,mn=101*101;
char linie[106];
bool B[101][101];
vector < pair <int,int> > coada;
int main()
{
    f>>n>>m;
    f.getline(linie,m+5);
    for (i=1;i<=n;i++)
    {
        f.getline(linie,m+5);
        for (j=0;j<m;j++)
        {
            if (linie[j]=='R') {M[i][j+1]=1; coada.push_back(make_pair(i,j+1));}
            else if (linie[j]=='J') {M[i][j+1]=1; coada.push_back(make_pair(i,j+1));B[i][j+1]=true;}
            else if (linie[j]=='X') M[i][j+1]=-1;
        }
    }
    for (i=0;i<=m+1;i++) M[0][i]=M[n+1][i]=-1;
    for (i=0;i<=n+1;i++) M[i][0]=M[i][m+1]=-1;
    int k=0;
    int auxx[8]={-1,0,+1,0,+1,+1,-1,-1};
    int auxy[8]={0,-1,0,+1,+1,-1,+1,-1};
    while (k<coada.size())
    {
        x=coada[k].first;
        y=coada[k].second;
        for (i=0;i<8;i++)
        {
            if (M[x+auxx[i]][y+auxy[i]]==0)
            {
                coada.push_back(make_pair(x+auxx[i],y+auxy[i]));
                B[x+auxx[i]][y+auxy[i]]=B[x][y];
                M[x+auxx[i]][y+auxy[i]]=M[x][y]+1;
            }
            else if ((M[x+auxx[i]][y+auxy[i]]!=-1)&&(B[x][y]!=B[x+auxx[i]][y+auxy[i]]))
            {
                /*g<<M[x+auxx[i]][y+auxy[i]]<<" "<<x+auxx[i]<<" "<<y+auxy[i];
                k=coada.size()+10;
                break;*/
                if ((x+auxx[i]<mnx)||(x+auxx[i]==mnx&&mny>y+auxy[i]))
                {
                    mnx=x+auxx[i];
                    mny=y+auxy[i];
                    mn=M[x+auxx[i]][y+auxy[i]];
                }
            }
        }
        k++;
    }
    g<<mn<<" "<<mnx<<" "<<mny;
}