zoukankan      html  css  js  c++  java
  • uva297(quadtree)

    给我们两棵quadtree的前序遍历,要我吗求原来32*32的矩阵有多少个位置是黑的

    quardtree是将区域划分为相等的4个子空间,然后再递归划分这4个子空间,知道满足条件后终止划分

     这题的终止条件是遇到黑色或者白色的结点停止递归

    至于为什么一个前序遍历就能建树,是因为结点颜色的缘故,所以能够知道何时递归返回。所以能够建立一课树

    都没什么空敲java代码,反正C++语法都很熟悉了,就用java刷题吧,刷题,学java两不误

     1 import java.util.Scanner;
     2 
     3 
     4 public class Main {
     5     static Scanner cin = new Scanner(System.in);
     6     final static int LEN = 32;
     7     static int ans = 0;
     8     static String str;
     9     static int p;
    10     static int [][] mat = new int [LEN][LEN];
    11     public static void dfs(int r, int c, int w){//(r,c)是左上角
    12         
    13         char ch = str.charAt(p++);
    14         if(ch=='p'){
    15             dfs(r,c+w/2,w/2);//对于图中区域1部分的, 
    16             dfs(r,c,w/2);//对于图中区域2部分的, 
    17             dfs(r+w/2,c,w/2);//对于图中区域3部分的, 
    18             dfs(r+w/2,c+w/2,w/2);//对于图中区域4部分的, 
    19         }
    20         else if(ch=='f'){//如果遇到黑色的结点,就填充矩形
    21             for(int i=r; i<r+w; ++i)
    22                 for(int j=c; j<c+w; ++j)
    23                 if(mat[i][j]==0){//因为是两棵树合并,所以有可能重复填充,所以只有填充0的时候计算ans++
    24                     mat[i][j] = 1;
    25                     ans++;
    26                 }
    27         }
    28     }
    29     public static void init(){
    30         ans = 0;
    31         for(int i=0; i<LEN; ++i)
    32             for(int j=0; j<LEN; ++j)
    33                 mat[i][j] = 0;
    34     }
    35     public static void main(String[] args) {
    36         int n;
    37         
    38         n = cin.nextInt();
    39         cin.nextLine();
    40         for(int i=0; i<n; ++i){
    41             init();
    42             p = 0;
    43             str = cin.nextLine();
    44             dfs(0,0,LEN);
    45             p = 0;
    46             str = cin.nextLine();
    47             dfs(0,0,LEN);
    48             System.out.println("There are "+ans+" black pixels.");
    49         }
    50     }
    51 
    52 }
    View Code
  • 相关阅读:
    JavaScript脚本语言特色时钟
    这个周末安排,
    市场营销书籍推荐
    比较好的管理类书籍推荐
    如何培养自己的领导力?或许你该看看这些书
    十本最畅销的市场营销书籍,你看过几本?
    如何提高情商?答案可能在《情商必读12篇》这本书里
    如何管理好员工?
    做销售要看哪些书?《销售管理必读12篇》了解下
    管理书籍推荐,你看过哪些呢?
  • 原文地址:https://www.cnblogs.com/justPassBy/p/4457301.html
Copyright © 2011-2022 走看看