Cod sursa(job #1009612)

Utilizator dd1997Dan Vasile dd1997 Data 13 octombrie 2013 15:58:23
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.41 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <string>

using namespace std;


ifstream f ("Rj.in");
ofstream g ("Rj.out");

int m, n, i, k, c, fx, fy;
char ch;
int vx [] = {1, 1, 0, -1, -1, -1, 0, 1};
int vy [] = {0, 1, 1, 1, 0, -1, -1, -1};
queue <int> x;
queue <int> y;
queue <int> w;
queue <int> pas;



int main()
{
    pas.push(1);
    pas.push(1);
    f >> m >> n;
    int rj[2][n+1][m+1];
    string s;
    getline(f, s);
    for (i = 1; i <= n; i++)
    {
        getline(f, s);
        if(s.length() < m + 1)
        {
            for (k=s.length(); k <= m; k++)
                rj[1][i][k] = rj[2][i][k] = 0;
        }
        for (k = 1; k <= m; k++)
        {
            ch = s[k-1];
            switch (ch)
            {
            case ' ':
                rj[1][i][k] = rj[2][i][k] = 0;
                break;
            case 'X':
                rj[1][i][k] = rj[2][i][k] = -5;
                break;
            case 'R':
                x.push(i);
                y.push(k);
                w.push(1);
                rj[1][i][k] = rj[2][i][k] = 0;
                break;
            case 'J':
                x.push(i);
                y.push(k);
                w.push(2);
                rj[1][i][k] = rj[2][i][k] = 0;
                break;
            }
        }
    }
    for(i=1; i <=n; i++)
    {
        for(k=1; k<=m; k++)
            cout << rj[1][i][k] << "      ";
        cout << "\n\n\n";
    }
    c = 1;
    while(c)
    {
        for (i = 0; i < 8; i++)
        {
            if((rj[w.front()][x.front()+vx[i]][y.front()+vy[i]]==0)&&(x.front()+vx[i]>0)&&(y.front()+vy[i]>0)&&(x.front()+vx[i] < m)&&(y.front()+vy[i] < n))
            {
                rj [w.front()] [x.front() + vx[i]] [y.front() + vy[i]] = rj [w.front()] [x.front()] [y.front()] + 1;
                x.push(x.front()+vx[i]);
                y.push(y.front()+vy[i]);
                w.push(w.front());
                pas.push(pas.front()+1);
                if((rj[1][x.front()+vx[i]][y.front()+vy[i]] == rj[2][x.front()+vx[i]][y.front()+vy[i]]) && (rj[1][x.front()+vx[i]][y.front()+vy[i]] != -5))
                {
                    fx = x.front()+vx[i];
                    fy = y.front()+vy[i];
                    c = 0;
                    g << pas.front() + 1 << " ";
                    break;
                }

            }
            else if((rj[w.front()][x.front()][y.front()]+1 < rj[w.front()][x.front()+vx[i]][y.front()+vy[i]])&&(x.front()+vx[i]>0)&&(y.front()+vy[i]>0)&&(x.front()+vx[i] < m)&&(y.front()+vy[i] < n))
            {
                rj[w.front()][x.front()+vx[i]][y.front()+vy[i]] = rj[w.front()][x.front()][y.front()] + 1;
                x.push(x.front()+vx[i]);
                y.push(y.front()+vy[i]);
                w.push(w.front());
                pas.push(pas.front()+1);
                if((rj[1][x.front()+vx[i]][y.front()+vy[i]] == rj[2][x.front()+vx[i]][y.front()+vy[i]]) && (rj[1][x.front()+vx[i]][y.front()+vy[i]] != -5))
                {
                    fx = x.front()+vx[i];
                    fy = y.front()+vy[i];
                    c = 0;
                    g << pas.front() + 1 << " ";
                    break;
                }
            }
        }
        x.pop();
        y.pop();
        w.pop();
        pas.pop();
    }
    g << fx << " " << fy << " ";
    return 0;
}