Cod sursa(job #1011884)

Utilizator dd1997Dan Vasile dd1997 Data 17 octombrie 2013 18:29:12
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.35 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 <short int> x;
queue <short int> y;
queue <short int> w;
queue <short int> pas;



int main()
{
   pas.push(1);
   pas.push(1);
   f >> m >> n;
   short int rj[3][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;
}