PAT (Advanced) 1091. Acute Stroke (30)

4人阅读 评论(0) 收藏 举报
分类:

原题:1091. Acute Stroke (30)



解题思路:

按题意进行bfs即可(dfs会爆栈),求出值为1的联通分量,数量大于等于阈值的加入最终答案。


代码如下:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int maxm = 1300;
const int maxn = 130;
const int maxl = 65;
int G[maxn][maxm][maxl];
int vis[maxn][maxm][maxl];
int m, n, l, t;
int dx[] = {1, 0, 0, -1, 0, 0};
int dy[] = {0, 1, 0, 0, -1, 0};
int dz[] = {0, 0, 1, 0, 0, -1};

bool is_valid(int x, int y, int z)
{
    return x >= 0 && x < m && y >= 0 && y < n && z >= 0 && z < l;
}

struct Ax
{
    int x, y, z;
    Ax(int _x, int _y, int _z): x(_x), y(_y), z(_z) {}
};

void bfs(int i, int j, int k, int& cnt)
{
    queue<Ax> q;
    q.push(Ax(i, j, k));
    vis[i][j][k] = 1;
    cnt++;
    while(!q.empty())
    {
        Ax top = q.front(); q.pop();
        for(int it = 0; it < 6; it++)
        {
            int x = top.x + dx[it];
            int y = top.y + dy[it];
            int z = top.z + dz[it];
            if(is_valid(x, y, z) && !vis[x][y][z] && G[x][y][z])
            {
                cnt++;
                vis[x][y][z] = 1;
                q.push(Ax(x, y, z));
            }
        }
    }
}


int main()
{
    while(scanf("%d%d%d%d", &m, &n, &l, &t) == 4)
    {
        for(int k = 0; k < l; k++)
            for(int i = 0; i < m; i++)
                for(int j = 0; j < n; j++)
                    scanf("%d", &G[i][j][k]);
        memset(vis, 0, sizeof(vis));
        int ans = 0;
        for(int k = 0; k < l; k++)
            for(int i = 0; i < m; i++)
                for(int j = 0; j < n; j++)
                {
                    int cnt = 0;
                    if(!vis[i][j][k] && G[i][j][k])
                    {
                        bfs(i, j, k, cnt);
                        if(cnt >= t)
                            ans += cnt;
                    }
                }
        printf("%d\n", ans);
    }
    return 0;
}

查看评论

1091. Acute Stroke (30)-PAT甲级真题(广度优先搜索)

1091. Acute Stroke (30) One important factor to identify acute stroke (急性脑卒中) is the volume of ...
  • liuchuo
  • liuchuo
  • 2016-08-21 14:57:41
  • 487

【PAT】1091. Acute Stroke (30)

One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re...
  • realxuejin
  • realxuejin
  • 2015-11-03 14:35:46
  • 1054

1091. Acute Stroke (30) BFS or DFS

1091. Acute Stroke (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B ...
  • sinat_29278271
  • sinat_29278271
  • 2015-08-19 01:11:30
  • 920

1091. Acute Stroke(30)

看到这道最先想到的是数连通集,个人喜好,利用递归的方式进行深度遍历,可惜最后两个用例 段错误 1.深度遍历. 代码如下: #include #include #include using n...
  • wingwingtwo
  • wingwingtwo
  • 2016-03-09 15:05:42
  • 218

1091.Acute Stroke

【题意】         给出一个三维空间的 01 矩阵,算出所有超出阈值的相连的1的数目 【思路】         看到题目描述马上想到了并查集,不过我之前的题目都没用并查集写过,于是...
  • sinat_25278091
  • sinat_25278091
  • 2015-01-28 19:23:15
  • 288

PAT-A-1091. Acute Stroke (30)

1091. Acute Stroke (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B ...
  • doglovecow
  • doglovecow
  • 2017-05-19 00:09:18
  • 88

PAT (Advanced Level) 1091. Acute Stroke (30) 3维DFS(10M数据时栈溢出)、3维BFS(AC)

One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re...
  • tuzigg123
  • tuzigg123
  • 2015-07-31 10:05:33
  • 848

1091. Acute Stroke (30) -- DFS(三维空间)

题目地址:http://www.patest.cn/contests/pat-a-practise/1091这题题目理解很关键,就是个三维空间,每一个点的相邻点有6个,下面是参考网上的代码写出来的 可...
  • qq_26437925
  • qq_26437925
  • 2015-08-16 17:06:46
  • 553

【PAT】【Advanced Level】1091. Acute Stroke (30)

DFS,BFS
  • u011777915
  • u011777915
  • 2017-09-04 16:59:01
  • 77

PAT 1091. Acute Stroke (30)

用BFS做的。#include #include using namespace std; struct node{ int i,j,k; node(int i=-1,int j...
  • pantingting_zju
  • pantingting_zju
  • 2015-03-08 22:08:14
  • 354
    个人资料
    持之以恒
    等级:
    访问量: 3202
    积分: 1023
    排名: 5万+
    文章分类
    文章存档
    最新评论
  • PAT (Advanced) 10...

    cx86918626: [reply]M_Syple[/reply] 刚翻到一个帖子,最后一个样例好像是所有的硬币全加起来...

  • PAT (Advanced) 10...

    cx86918626: [reply]M_Syple[/reply]没找到,当时想了很多办法,但最后就是不行,我猜是其实给...

  • PAT (Advanced) 10...

    M_Syple: dfs我也是最后一个点过不了,但看运行时间最后一个点不是大数据检测啊,你最后找到dfs的毛病了么