Cod sursa(job #2251130)

Utilizator riordache58Razvan Iordache riordache58 Data 1 octombrie 2018 10:10:58
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <fstream>
#include <queue>
#include <vector>
#define Nmax 40

using namespace std;

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

int n, m, nr;
int a[Nmax][Nmax][Nmax];
int x, y, z;
int xx, yy, zz;
int dx[]={-1, 0, 1, 0, 0, 0};
int dy[]={0, -1, 0, 1, 0, 0};
int dz[]={0, 0, 0, 0, -1, 1};

struct el{
int x, y, z;
};
vector <el> v;
vector <el> :: iterator w;
queue <el> Q;

bool inside(int x, int y, int z)
{
    if( x >= 1 && x <= n && y >= 1 && y <= n && z <= n && z >= 1 )
        return true;
    return false;
}

void bf()
{
    Q.push({1,1,1});
    while(!Q.empty())
    {
        x=Q.front().x;
        y=Q.front().y;
        z=Q.front().z;
        Q.pop();
        for ( int i = 0; i < 6; i ++ )
        {
            xx=x+dx[i];
            yy=y+dy[i];
            zz=z+dz[i];
            if(inside(xx, yy, zz) == false) continue;
            if(a[xx][yy][zz] == -1) continue;
            if(a[xx][yy][zz] != 0) continue;
            a[xx][yy][zz]=a[x][y][z]+1;
            Q.push({xx,yy,zz});
        }
    }

}

int main()
{
    f >> n >> m;
    a[1][1][1]=1;
    for ( int i = 1; i <= m; i ++ )
        {
            f >> x >> y >> z;
            a[x][y][z]=-1;
        }
      bf();
      g << a[n][n][n] << '\n';
      x = y = z = n;
      v.push_back({n, n, n});

      while( x > 1 or y > 1 or z > 1 )
      {
          for( int i = 0; i < 6; i ++ )
          {
              xx=x+dx[i];
              yy=y+dy[i];
              zz=z+dz[i];
              if(inside(xx, yy, zz) == false) continue;
              if(a[xx][yy][zz] == (a[x][y][z]-1))
              {
                  x=xx;
                  y=yy;
                  z=zz;
                  v.push_back({x, y, z});
                  break;
              }
          }
      }

        for ( w = v.end()-1; w != v.begin(); w -- )
            g << (*w).x << " " << (*w).y << " " << (*w).z << '\n';
    g << n << " " << n << " " << n;
    return 0;
}