• PAT甲级1091 Acute Stroke【三维bfs】


    题目https://pintia.cn/problem-sets/994805342720868352/problems/994805375457411072

    题意:

    求三维的连通块

    思路:

    简单bfs

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<map>
     4 #include<set>
     5 #include<iostream>
     6 #include<cstring>
     7 #include<algorithm>
     8 #include<vector>
     9 #include<cmath> 
    10 #include<stack>
    11 #include<queue>
    12 
    13 #define inf 0x7fffffff
    14 using namespace std;
    15 typedef long long LL;
    16 typedef pair<string, string> pr;
    17 
    18 int m, n, l, t;
    19 struct node{
    20     int x, y, z;
    21     node(){
    22     }
    23     node(int _x, int _y, int _z){
    24         x = _x;
    25         y = _y;
    26         z = _z;
    27     }
    28 };
    29 
    30 int dx[6] = {0, 0, 0, 0, 1, -1};
    31 int dy[6] = {1, -1, 0, 0, 0, 0};
    32 int dz[6] = {0, 0, 1, -1, 0, 0};
    33 bool space[1300][130][65];
    34 bool vis[1300][130][65];
    35 int tot = 0;
    36 
    37 bool check(int i, int j, int k)
    38 {
    39     if(i < 0 || i >= m || j < 0 || j >= n || k < 0 || k >= l)return false;
    40     else return true;
    41 }
    42 
    43 void bfs(int x, int y, int z)
    44 {
    45     queue<node>que;
    46     que.push(node(x, y, z));
    47     vis[x][y][z] = true;
    48     int cnt = 1;
    49     while(!que.empty()){
    50         node now = que.front();que.pop();
    51         for(int i = 0; i < 6; i++){
    52             int a = now.x + dx[i], b = now.y + dy[i], c = now.z + dz[i];
    53             if(check(a, b, c) && !vis[a][b][c] && space[a][b][c]){
    54                 que.push(node(a, b, c));
    55                 vis[a][b][c] = true;
    56                 cnt++;
    57             }
    58         }
    59     }
    60     if(cnt >= t){
    61         tot += cnt;
    62     }
    63 }
    64 
    65 int main()
    66 {
    67     scanf("%d%d%d%d", &m, &n, &l, &t);
    68     for(int k = 0; k < l; k++){
    69         for(int i = 0; i < m; i++){
    70             for(int j = 0; j < n; j++){
    71                 scanf("%d", &space[i][j][k]);
    72             }
    73         }
    74     }
    75     
    76     
    77     for(int k = 0; k < l; k++){
    78         for(int i = 0; i < m; i++){
    79             for(int j = 0; j < n; j++){
    80                 if(!vis[i][j][k] && space[i][j][k])
    81                     bfs(i, j, k);
    82             }
    83         }
    84     }
    85     printf("%d
    ", tot);
    86     return 0;
    87 }
  • 相关阅读:
    vue中handsontable 使用
    vue项目在APP禁止页面缩放
    SuperAgent使用文档
    echart 图表自定义样式
    vue router-link子级返回父级页面
    浏览器的多线程
    gzip压缩
    清除浮动的方法
    vue-router的hash和history模式的区别
    Docker镜像+nginx 部署 vue 项目
  • 原文地址:https://www.cnblogs.com/wyboooo/p/10658799.html
Copyright © 2020-2023  润新知