1114. Food Cubes (3D bfs)

来源:互联网 发布:2017ios福利软件 编辑:程序博客网 时间:2024/06/05 00:51



#include <stdio.h>#include <memory.h>const int N=102;const int nei[6][3]={ { 0, 0, 1},                      { 0, 0,-1},                      { 1, 0, 0},                      {-1, 0, 0},                      { 0, 1, 0},                      { 0,-1, 0} };bool cube[N][N][N];int minb,maxb;bool checkrange(int p){    return (p>=minb && p<=maxb);}void fill( int x, int y, int z ){    for (int i=0; i<6; ++i)    {        int xx,yy,zz;        xx=x+nei[i][0];        yy=y+nei[i][1];        zz=z+nei[i][2];                if ( !( checkrange(xx) && checkrange(yy) && checkrange(zz) ) )                continue;                        if ( cube[xx][yy][zz]== false )         {            cube[xx][yy][zz]=true;            fill(xx,yy,zz);        }    }}int main(int argc, char** argv){    int t, m, x, y, z, ans;    scanf("%d", &t );        while ( t-- )    {        memset(cube, false, sizeof( cube ) );        scanf("%d" , &m );        minb=100;        maxb=1;        for (int i=0; i<m; ++i)        {            scanf("%d%d%d", &x, &y, &z);            if ( x>maxb) maxb=x;            if ( y>maxb) maxb=y;            if ( z>maxb) maxb=z;            if ( x<minb) minb=x;            if ( y<minb) minb=y;            if ( z<minb) minb=z;            cube[x][y][z]=true;        }        --minb;        ++maxb;        ans=0;                for (int xx=minb; xx<=maxb; ++xx)          for (int yy=minb; yy<=maxb; ++yy)             for (int zz=minb; zz<=maxb; ++zz)                if ( cube[xx][yy][zz] == false )                {                    cube[xx][yy][zz]=true;                    ++ans;                    fill(xx, yy, zz);                }        printf("%d\n", ans-1);            }    return 0;}


原创粉丝点击