Cod sursa(job #1808138)

Utilizator DibuDibu Matei Dibu Data 17 noiembrie 2016 13:30:17
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <fstream>
#include <queue>
using namespace std;
ofstream g("rj.out");
int n,m;
float a[110][110];
const short dx[]={0,-1,-1,-1,0,1,1,1},
            dy[]={1,1,0,-1,-1,-1,0,1};
void afis();
int main()
{
    ifstream f("rj.in");
    f>>n>>m;
    f.get();
    char aux;
    int i,j;
    queue < pair<int,int> > c;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            f.get(aux);
            if(aux=='X')
                a[i][j]=-1;
            else if(aux=='R')
                a[i][j]=3, c.push(make_pair(i,j));
            else if(aux=='J')
                a[i][j]=-3, c.push(make_pair(i,j));
        }
        f.get();
    }
    f.close();
    for(i=0; i<=n+1; i++)
        a[i][0]=a[i][m+1]=-1;
    for(j=0; j<=m+1; j++)
        a[0][j]=a[n+1][j]=-1;
    int dir,xnou,ynou;
    while(!c.empty())
    {
        for(dir=0; dir<8; dir++)
        {
            xnou=c.front().first  +dx[dir];
            ynou=c.front().second +dy[dir];
            if(!a[xnou][ynou])
            {
                c.push(make_pair(xnou,ynou));
                if(a[c.front().first][c.front().second]<0)
                    a[xnou][ynou]=a[c.front().first][c.front().second]-1;
                else
                    a[xnou][ynou]=a[c.front().first][c.front().second]+1;
            }
            else if(a[xnou][ynou]==-1*a[c.front().first][c.front().second]+1)
            {
                g<<a[xnou][ynou]-2<<' '<<xnou<<' '<<ynou;
                g.close();
                return 0;
            }
        }
        c.pop();
    }
    return 0;
}
void afis()
{
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if(a[i][j]>-1)
                g<<' ';
            g<<a[i][j]<<' ';
        }
        g<<'\n';
    }
    g<<'\n';
}