zoukankan      html  css  js  c++  java
  • UVa 四叉树

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=233

    参考了刘汝佳的算法,写得太妙了。

    因为最多是1024块,所以每行每列最多是32,利用先序遍历,一旦是'p'时,就访问第1块,如果第一块内还有细分,则继续递归下去。然后继续依次访问第2,3,4块空间。

     1 #include<iostream>
     2 #include<cstring>
     3 using namespace std;
     4 
     5 const int len = 32;
     6 const int maxn = 1024 + 10;
     7 char s[maxn];
     8 char buf[maxn][maxn];
     9 int number;
    10 
    11 void solve(char *s, int &p,int r,int c,int w)
    12 {
    13     char q = s[p++];
    14     if (q == 'p')
    15     {
    16         solve(s, p, r, c + w / 2, w / 2);
    17         solve(s, p, r, c, w / 2);
    18         solve(s, p, r + w / 2, c, w / 2);
    19         solve(s, p, r + w / 2, c + w / 2, w / 2);
    20     }
    21     else if (q=='f')
    22     for (int i = r; i < r + w;i++)
    23     for (int j = c; j < c + w;j++)
    24     if (buf[i][j] == 0)
    25     {
    26         buf[i][j] = 1;
    27         number++;
    28     }
    29 }
    30 
    31 int main()
    32 {
    33     int t;
    34     cin >> t;
    35     while (t--)
    36     {
    37         memset(buf, 0, sizeof(buf));
    38         number = 0;
    39         cin >> s;
    40         int p = 0;
    41         solve(s,p,0,0,len);
    42         cin >> s;
    43         p = 0;
    44         solve(s,p,0,0,len);
    45         cout << "There are " << number << " black pixels." << endl;
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    oracle 更改账户名密码
    mongodb 分片副本集搭建
    爬虫目录
    centos MySQL安装与卸载
    ANACONDA 安装
    chrome 安装
    linux pycharm 安装 idea
    linux 基本命令
    高数18讲 之极限与连续
    高数18讲 之基础知识
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6181101.html
Copyright © 2011-2022 走看看