PAT(Advance) 1091. Acute Stroke (30)
2015-05-30 12:47
411 查看
题意是在实难懂,其实就是就是包含上下左右前后的一块连通区域内的1的数量大于threshold
DFS和BFS都可以,网上说DFS递归的话可能会爆栈,要写一个非递归的形式
我是用的BFS
DFS和BFS都可以,网上说DFS递归的话可能会爆栈,要写一个非递归的形式
我是用的BFS
#include <iostream> #include<queue> #define ROWS 1286 #define COLS 128 #define SLI 60 int map[SLI][ROWS][COLS]; bool visited[SLI][ROWS][COLS]; int col,row,slice,threshold; struct graph{ int x,y,z; }; using namespace std; queue<struct graph> q; int BFS(){ int sum = 0; struct graph node; for(int i = 0;i<slice;i++) for(int j = 0;j<row;j++) for(int k = 0;k<col;k++) if(!visited[i][j][k]&&map[i][j][k]){ visited[i][j][k] = true; node.x = j; node.y = k; node.z = i; int x,y,z; q.push(node); int value = 0; while(q.size()){ node = q.front(); q.pop(); x = node.x; y = node.y; z = node.z; if(x&&!visited[z][x-1][y]&&map[z][x-1][y]) { node.x = x-1; node.y = y; node.z = z; visited[z][x-1][y] = true; q.push(node); } if(y&&!visited[z][x][y-1]&&map[z][x][y-1]){ node.x = x; node.y = y-1; node.z = z; visited[z][x][y-1] = true; q.push(node); } if(x<row-1&&!visited[z][x+1][y]&&map[z][x+1][y]){ node.x = x+1; node.y = y; node.z = z; visited[z][x+1][y] = true; q.push(node); } if(y<col-1&&!visited[z][x][y+1]&&map[z][x][y+1]){ node.x = x; node.y = y+1; node.z = z; visited[z][x][y+1] = true; q.push(node); } if(z&&!visited[z-1][x][y]&&map[z-1][x][y]){ node.x = x; node.y = y; node.z = z-1; visited[z-1][x][y] = true; q.push(node); } if(z<slice-1&&!visited[z+1][x][y]&&map[z+1][x][y]){ node.x = x; node.y = y; node.z = z+1; visited[z+1][x][y] = true; q.push(node); } value++; } if(value>=threshold) sum += value; } return sum; } int main(){ cin >> row >> col >> slice >> threshold; for(int i = 0;i<slice;i++) for(int j = 0;j<row;j++) for(int k = 0;k<col;k++) { cin >> map[i][j][k]; visited[i][j][k] = false; } cout << BFS() << endl; return 0; }
相关文章推荐
- libdvbpsi源码分析(四)PAT表解析/重建
- PAT配置
- 什么是端口复用动态地址转换(PAT) 介绍配置实例
- MikroTik layer7-protocol
- PAT是如何工作的
- PAT (Advanced Level) Practise 1001-1010
- 数据结构学习与实验指导(一)
- PAT Basic Level 1001-1010解题报告
- 1001. 害死人不偿命的(3n+1)猜想
- 1002. 写出这个数
- 1032. 挖掘机技术哪家强
- 1001. 害死人不偿命的(3n+1)猜想 (PAT basic)
- 1002. 写出这个数(PAT Basic)
- 1004. 成绩排名(PAT Basic)
- 1006. 换个格式输出整数(PAT Basic)
- 1007. 素数对猜想(PAT Basic)
- 1008. 数组元素循环右移问题
- 1009. 说反话(PAT Basic)
- 1011. A+B和C(PAT Basic)
- 2-06. 数列求和{PAT}