UVa 297 (四分树 递归) Quadtrees
2014-09-22 18:01
489 查看
题意:
有一个32×32像素的黑白图片,用四分树来表示。树的四个节点从左到右分别对应右上、左上、左下、右下的四个小正方区域。然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的,e(empty)代表该节点是白色的,p表示灰色节点,即它还有子节点。
每组数据给出两幅图,求两幅图黑色像素合并以后的黑色像素的个数。
分析:
字符串是递归给出的,那么就递归地处理。遇到字符'p'就递归进去,遇到黑色色的就统计。
递归函数的参数有个是引用,标记读到字符串是哪一位了,简化了程序。
代码君
有一个32×32像素的黑白图片,用四分树来表示。树的四个节点从左到右分别对应右上、左上、左下、右下的四个小正方区域。然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的,e(empty)代表该节点是白色的,p表示灰色节点,即它还有子节点。
每组数据给出两幅图,求两幅图黑色像素合并以后的黑色像素的个数。
分析:
字符串是递归给出的,那么就递归地处理。遇到字符'p'就递归进去,遇到黑色色的就统计。
递归函数的参数有个是引用,标记读到字符串是哪一位了,简化了程序。
#include <cstdio> #include <cstring> const int len = 32; const int maxn = 1024 + 10; char s[maxn]; int buf[len][len], cnt; void draw(const char* s, int& p, int r, int c, int w) { char ch = s[p++]; if(ch == 'p') { draw(s, p, r, c+w/2, w/2); draw(s, p, r, c, w/2); draw(s, p, r+w/2, c, w/2); draw(s, p, r+w/2, c+w/2, w/2); } else if(ch == 'f') { int i, j; for(i = r; i < r+w; ++i) for(j = c; j < c+w; ++j) if(buf[i][j] == 0) { buf[i][j] = 1; cnt++; } } } int main(void) { //freopen("in.txt", "r", stdin); int T; scanf("%d", &T); while(T--) { memset(buf, 0, sizeof(0)); cnt = 0; int i; for(i = 0; i < 2; ++i) { scanf("%s", s); int p = 0; draw(s, p, 0, 0, len); } } printf("There are %d black pixels.\n", cnt); return 0; }
代码君
相关文章推荐
- Uva297 Quadtrees【递归建四分树】【例题6-11】
- uva 297 Quadtrees 四分树
- 6-11 四分树(Quadtrees, UVa 297)
- UVA.297 Quadtrees (四分树 DFS)
- UVA - 297 Quadtrees(四分图)
- UVA297 Quadtrees(递归!!!)
- UVA-297 Quadtrees (四分树)
- 例题6-11 四分树(Quadtrees, UVa 297)
- 例题6-11 UVa297 Quadtrees(四分树)
- UVa 297 Quadtrees(四分树)
- UVA - 297Quadtrees(四分图)
- UVa 297 Quadtrees(模拟&四分树)
- Uva-297 - Quadtrees(四分树与结构体指针)
- UVa297 例题6-11 四分树(Quadtrees)
- uva 297 quadtrees——yhx
- uva297 - Quadtrees 入门经典II 第六章 数据结构基础 例题6-11
- UVA 297 - Quadtrees
- Uva - 297 - Quadtrees
- UVa 297 - Quadtrees
- uva 297 Quadtrees