Pagini recente » Cod sursa (job #941155) | Cod sursa (job #2162614) | Cod sursa (job #1233266) | Cod sursa (job #2623037) | Cod sursa (job #2251130)
#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;
}