社区讨论
求助一个站外题
学术版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo7ppxdc
- 此快照首次捕获于
- 2023/10/27 05:44 2 年前
- 此快照最后确认于
- 2023/10/27 05:44 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
int i,j,k,n,a[1025][1025];
int dfs(int x,int y,int wide)
{
k=0;
for(i=x;i<=x+wide-1;i++)
for(j=y;i<=y+wide-1;j++)
if(a[i][j]==0)
k++;
if(k==wide*wide)
cout<<"w";
else if(k==0)
cout<<"b";
else {
cout<<"g";
dfs(x+wide/2,y,wide/2);
dfs(x,y,wide/2);
dfs(x,y+wide/2,wide/2);
dfs(x+wide/2,y+wide/2,wide/2);
}
}
int main()
{
cin>>n;
for(i=1;i<=n;i++)
for(j=1;i<=n;j++)
cin>>a[i][j];
dfs(1,1,n);
}
3、黑白影像 ( blackandwhite ) 2s
[问题描述]
一张黑白影像可以以一个二维阵列表示,将阵列的每个元素以一个位元表示其颜色,1 代
表黑色,0 代表白色。然而在大多数情况下,我们发现一张黑白影像中,相同的颜色通常会
位在相邻的位置;因此我们可以利用四分树(quadtree)的表示法来记录一张黑白影像,以
得到比二维阵列较节省记忆的表示法。
四分树的表示法就是将目前欲表示的黑白影像区域,以十字形方式分割为四份,分别为
东北方、西北方、西南方及东南方四个子区域。以图一为例,当把整张大小为 16×16 的图分
割为四份时,东北方的恰好为一整块的黑色,我们可以一个黑色的节点(图二中的 1 号节点)
表示这整个 4×4 的黑色区域。而西北方的 4×4 区域并非由同一色所组成,因此必须再进行
分割;当我们以相同的方式同样地分割西北方的 4×4 区域,可得到图二中第 3、4、5 号节点
以及再下一层的 9、10、11、12 号节点。图二中,黑色的节点表示黑色的像素,白色的节点
表示白色的像素,圆圈表示内部节点。
图一 图二
当我们得到图二的四分树表示法后,可使用 b,w,g 三个符号分别代表黑色节点,白色节
点及内部节点,依照深先(depth-first)表示法将四分树符号输出(依 pre-order 顺序输
出)。因此,图二的四分树可表示成
g b g w w w g w b b w w g w w g w w b b b
请写一个程序,将每张黑白影像的四分树表示法,利用 b,w,g 三个符号以深先表示法的
结果列出。
[输入格式]
第一行为一个整数 n,代表一张正方形黑白影像的宽度及高度。
接下来的 n 行代表影像中每一行的内容:0 表示一个白色像素,1 表示一个黑色像素。
[输出格式]
对每一个输入的黑白影像,将其四分树表示法以 b,w,g 三个符号,依深先表示法顺序列
出(每个输出符号之间有一个空格隔开)。
回复
共 0 条回复,欢迎继续交流。
正在加载回复...