急性中风


https://www.acwing.com/problem/content/1583/

注意:
三维的时候有六个方向。

#include <iostream>
#include <cstring>
#include <queue>

using namespace std;

const int M = 1286, N = 128, L = 60;

int m, n, l, T;
int g[L][M][N];
struct Node
{
    int x, y, z;
};

int d[][3] = {
    {1, 0, 0},
    {-1, 0, 0},
    {0, 1, 0},
    {0, -1, 0},
    {0, 0, 1},
    {0, 0, -1},
};

int bfs(int x, int y, int z)
{
    queue<Node> q;
    q.push({x, y, z});
    g[x][y][z] = 0;

    int cnt = 1;
    while (q.size())
    {
        auto t = q.front();
        q.pop();

        for (int i = 0; i < 6; i ++ )
        {
            int a = t.x + d[i][0], b = t.y + d[i][1], c = t.z + d[i][2];
            if (a >= 0 && a < l && b >= 0 && b < m && c >= 0 && c < n && g[a][b][c])
            {
                g[a][b][c] = 0;
                q.push({a, b, c});
                cnt ++ ;
            }
        }
    }

    return cnt;
}

int main()
{
    scanf("%d%d%d%d", &m, &n, &l, &T);

    for (int i = 0; i < l; i ++ )
        for (int j = 0; j < m; j ++ )
            for (int k = 0; k < n; k ++ )
                scanf("%d", &g[i][j][k]);

    int res = 0;
    for (int i = 0; i < l; i ++ )
        for (int j = 0; j < m; j ++ )
            for (int k = 0; k < n; k ++ )
                if (g[i][j][k])
                {
                    int t = bfs(i, j, k);
                    if (t >= T) res += t;
                }

    printf("%d/n", res);

    return 0;
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/281978.html

(0)
上一篇 2022年8月24日 13:19
下一篇 2022年8月24日 13:19

相关推荐

发表回复

登录后才能评论