社区讨论

求助一个站外题

学术版参与者 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 条回复,欢迎继续交流。

正在加载回复...