第六章部分例题

没看解答敲了一遍,发现自己题目的理解能力有点差

  1 #include <iostream>
  2 #include <cstdio>
  3
  4 using namespace std;
  5
  6 struct Node
  7 {
  8     char value;
  9     Node* ch1;
 10     Node* ch2;
 11     Node* ch3;
 12     Node* ch4;
 13
 14     Node():ch1(NULL),ch2(NULL),ch3(NULL),ch4(NULL){}
 15 };
 16
 17 Node* newnode() {return new Node();}
 18
 19 Node* builtree(Node* root)
 20 {
 21     char v;
 22     cin>>v;
 23
 24     if(root==NULL)
 25         root=newnode();
 26
 27     if(v==‘e‘)
 28     {
 29         root->value=‘e‘;
 30         return root;
 31     }
 32
 33     if(v==‘f‘)
 34     {
 35         root->value=‘f‘;
 36         return root;
 37     }
 38     else
 39     {
 40         root->value=‘p‘;
 41
 42         root->ch1=builtree(root->ch1);
 43         root->ch2=builtree(root->ch2);
 44         root->ch3=builtree(root->ch3);
 45         root->ch4=builtree(root->ch4);
 46     }
 47
 48     return root;
 49 }
 50
 51 void _builtree(Node*& root)                //使用引用,不然不能改变root
 52 {
 53     char v;
 54     cin>>v;
 55
 56     if(root==NULL)
 57         root=newnode();
 58
 59     if(v==‘e‘)
 60     {
 61         root->value=‘e‘;
 62         return;
 63     }
 64
 65     if(v==‘f‘)
 66     {
 67         root->value=‘f‘;
 68         return;
 69     }
 70     else
 71     {
 72         root->value=‘p‘;
 73
 74         _builtree(root->ch1);
 75         _builtree(root->ch2);
 76         _builtree(root->ch3);
 77         _builtree(root->ch4);
 78     }
 79 }
 80
 81 void reset(Node* root) {root->ch1=root->ch2=root->ch3=root->ch4=NULL;}
 82
 83 Node* merge(Node* root1,Node* root2)
 84 {
 85     if(root2->value==‘f‘)
 86     {
 87         reset(root1);
 88         root1->value=‘f‘;
 89     }
 90     if(root2->value==‘p‘)
 91     {
 92         if(root1->value==‘e‘) root1=root2;
 93         if(root1->value==‘p‘)
 94         {
 95             root1->ch1=merge(root1->ch1,root2->ch1);
 96             root1->ch2=merge(root1->ch2,root2->ch2);
 97             root1->ch3=merge(root1->ch3,root2->ch3);
 98             root1->ch4=merge(root1->ch4,root2->ch4);
 99         }
100     }
101
102     return root1;
103 }
104
105
106
107 void print_tree(Node* root)
108 {
109     if(root==NULL) return;
110
111     printf("%c ",root->value);
112
113     print_tree(root->ch1);
114     print_tree(root->ch2);
115     print_tree(root->ch3);
116     print_tree(root->ch4);
117 }
118
119
120
121 int main()
122 {
123     Node* root1=NULL;
124     Node* root2=NULL;
125
126     _builtree(root1);
127     _builtree(root2);
128
129     root1=merge(root1,root2);
130
131     print_tree(root1);
132     cout<<endl;
133
134     return 0;
135 }

虽然能实现四叉树的合并但并不能算出像素:-(

然后看答案后又敲了遍

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4
 5 using namespace std;
 6
 7 const int len=32;
 8 const int maxn=10000;
 9 int w[len][len];
10 char buf[maxn];
11 int cnt;
12
13
14 void draw(int r,int c,int length,int& p)
15 {
16     char ch=buf[p++];
17
18     if(ch==‘p‘)
19     {
20         draw(r+length/2,c,length/2,p);
21         draw(r,c,length/2,p);
22         draw(r,c+length/2,length/2,p);
23         draw(r+length/2,c+length/2,length/2,p);
24     }
25     if(ch==‘f‘)                             //当树满足条件是,相当于递归基
26     {
27         for(int i=c;i<c+length;i++)
28             for(int j=r;j<r+length;j++)
29             {
30                 if(w[i][j]==0)
31                 {
32                     w[i][j]=1;
33                     cnt++;
34                 }
35             }
36     }
37 }
38
39 int main()
40 {
41     int T;
42     cin>>T;
43
44     while(T--)
45     {
46         memset(w,0,sizeof(w));
47
48         cnt=0;
49         int r=0;
50         int c=0;
51         int p=0;
52
53         scanf("%s",buf);
54         draw(r,c,len,p);
55
56         scanf("%s",buf);
57         p=0;
58         draw(r,c,len,p);
59
60         printf("%d\n", cnt);
61     }
62 }
时间: 2024-10-19 02:00:13

第六章部分例题的相关文章

机试指南第六章-搜索-例题自解

枚举: 枚举是最简单也是最直白的搜索方式,它依次尝试搜索空间中所有的解,测试其是否符合条件,若符合则输出答案,否则继续测试下一组解. 例6.1 百鸡问题 #include<iostream> using namespace std; int main() { int n; while (cin >> n) { for (int x = 0; x <= 100; x++) { for (int y = 0; y <= 100 - x; y++) { int z = 100

第六章部分例题 双向bfs邻接表和邻接矩阵实现

Idealpath 双向bfs输出颜色,邻接矩阵实现 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 #include <map> 6 #include <algorithm> 7 8 using namespace std; 9 10 const int maxn=10000; 11 const int inf=1

算法入门经典第六章 例题6-14 Abbott的复仇(Abbott&#39;s Revenge)BFS算法实现

Sample Input 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF * 2 3 SFR EL * 0 Sample Output (3,1) (2,1) (1,1) (1,2) (2,2) (2,3) (1,3) (1,2) (1,1) (2,1) (2,2) (1,2) (1,3) (2,3) (3,3) 析 题目的大意是,输入起点,离开起点时的朝向和终点,求一条最短路. 每一个

第六章存储器层次结构 学习报告

第六章 存储器层次结构 在简单模型中,存储器系统是一个线性的字节数组,而CPU能够在一个常数时间内访问每个存储器位置. 实际上,存储器系统是一个具有不同容量.成本和访问时间的存储设备的层次结构.CPU寄存器保存着最常用的数据.靠近CPU的小的.快速的高度缓存存储器作为一部分存储在相对慢速的主存储器中的数据和指令的缓冲区域.       存储器层次结构是可行的. 6.1  存储技术 6.1.1 随机访问存储器 随机反问存储器分为两类:静态的(SRAM)和动态的(DRAM). 1.静态RAM SRA

第六章、数据库及数据库对象

第六章.数据库及数据库对象 内容提要: 1.了解数据库的组成及特点 2.掌握SQL Server2008的安装与配置 3.掌握数据库的创建及维护方法 4.掌握架构的定义与维护方法 5.掌握分区表.索引及视图的创建及维护方法 第一节.创建及维护数据库 1.1.SQL Server数据库概述 SQL Server的发展史 SQL Server 7.0(1999年,正式跻身企业数据库行列) SQL Server 2000(2000年,代表产品) SQL Server 2005(2005年,代号"Yuk

数据库系统实现 第六章 查询执行

第六章 查询执行 查询执行也就是操作数据库的算法 一次查询的过程: 查询-->查询编译(第七章)-->查询执行(第六章)-->数据 查询编译预览 查询编译可以分为三个步骤: a)分析:构造分析树,用来表达查询和它的结构 b)查询重写,分析树被转化为初始查询计划,通常是代数表达式,之后初始的查询计划会被优化为一个时间更小的计划 c)物理计划生成,将查询计划转化成物理的计划, 为了选择更好的查询计划,需要判断 1)查询哪一个代数的等价形式是最有效的 2)对选中形式的每一个操作,所使用的算法选

第六章:异常机制

第六章:异常机制 异常的定义 异常:在程序运行过程中出现的意外事件,导致程序中断执行. 异常处理 try...catch 语法:try{ //可能出现异常的代码}catch(异常类型 异常对象名){ //处理异常的代码:}执行过程:当try中的代码异常发生时抛出一个异常对象,该异常对象与catch中异常类型进行匹配,匹配成功进入catch块,否则不执行catch中代码(相当于异常未被处理).程序只有当异常处理成功后才能继续执行. try...catch...catch 语法:try{ //可能出

2017上半年软考 第六章 重要知识点

第六章 项目整体管理 []项目整体管理概述 [][]项目整体管理的含义.作用和过程 项目整体管理6个过程?p264 项目整体管理包括什么? 项目管理的核心是什么? 项目整体管理涉及哪几个方面?p265 [][]项目经理是整合者 项目经理作为整合者要做什么?p265 [][]整体管理的地位 []项目整体管理实现过程 [][]制定项目章程概述 项目章程的意义是什么? 项目章程包括什么? [][]制定项目章程 项目章程的作用? 项目章程的输入? 制定项目章程的工具和技术?p267 项目章程的输出?p2

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片:多对多关系(上)

这章介绍了怎样创建一个新的实体来管理图片,怎样使用HTML窗体来上传图片文件和使用多对多关系来使它们与产品相关,并且怎样来保存图片到文件系统中.这章也介绍了更多复杂的错误处理增加客户端错误到模型中为了把它们显示回给用户.在这章中播种数据库使用的产品图片可能在在第六章的从Apress网页站点下载代码中. 注意:如果你想遵从这章的代码,你必须完成第五章的代码或者从www.apress.com下载第五章的源代码作为一个起点. 创建实体保存图片文件名 这个项目,我们正要使用文件系统在Web项目中存储图片