2011蓝桥杯Java决赛 连通问题

蓝桥杯2011省赛——字符串处理(Java) 问题描述: 要求程序对用户输入的串进行处理: 1.把每个单词的首字母变为大写。 2.把数字与字母之间用下划线字符(_)分开,使得更清晰。 3.把单词中间有多个空格的调整为1个空格。 输入 输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔;输入的串长度不超过200个字符。 输出 样例 输入复 you and e what cpp2005program 输出 You And Me What Cpp_2005_program 输入 this is a 阅读详情

这周五要进行蓝桥杯的决赛了,把去年的题目做了一下,第五题 连通问题:分享一下:

题目:

BMP是常见的图像存储格式。
如果用来存黑白图像(颜色深度=1),则其信息比较容易读取。

与之相关的数据:

(以下偏移均是从文件头开始)
偏移:10字节, 长度4字节: 图像数据真正开始的位置。
偏移:18字节, 长度4字节: 位图的宽度,单位是像素。
偏移:22字节, 长度4字节: 位图的高度,单位是像素。

从图像数据开始处,每个像素用1个二进制位表示。
从图片的底行开始,一行一行向上存储。

Windows规定图像文件中一个扫描行所占的字节数必须是4字节的倍数,
不足的位均以 0 填充。例如,图片宽度为45像素,实际上每行会占用
8个字节。

可以通过Windows自带的画图工具生成和编辑二进制图像。
需要在“属性”中选择“黑白”,指定为二值图像。
可能需要通过 查看 | 缩放 | 自定义... 把图像变大比例一些,
更易于操作。

图像的左下角为图像数据的开始位置。白色对应1,黑色对应0

我们可以定义:两个点距离如果小于2个像素,则认为这两个点连通。
也就是说:以一个点为中心的九宫格中,围绕它的8个点与它都是连通的。
如:t1.bmp 所示,左下角的点组成一个连通的群体;
而右上角的点都是孤立的。

程序的目标是:根据给定的黑白位图,分析出所有独立连通的群体,
输出每个连通群体的面积。所谓面积,就是它含有的像素的个数。

输入数据固定存在in.bmp中。

如示例的in.bmp,
程序应该输出:
12
81
52
133

该输出表示:共有4个连通群体。
输出的连通体面积间的顺序可以随意。

请编程解决上述问题。

我们测试程序的时候,会使用不同的in.bmp文件。


要求考生把所有类写在一个文件中。
调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。请不要使用package语句。

另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。







源码:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.ImageIO;

class Dian {
	public boolean value = false;
	public boolean visited = false;
}

public class LianTong {
	public static Dian ds[][] = null;
	public static int width, height;
	public static int result = 0;
	public static int visitedNum = 0;
	public static List<Integer> nums = new ArrayList<Integer>();
	public static int num = -1;

	public static void ScanBmp(int x, int y) {
		if (x < 0 || y < 0 || x >= width || y >= height) {
			return;
		}
		if (!ds[x][y].visited) {
			ds[x][y].visited = true;
			visitedNum++;
			if (ds[x][y].value) {
				result++;

				int tempNum = nums.get(num) + 1;
				nums.set(num, tempNum);
				ScanBmp(x - 1, y);
				ScanBmp(x - 1, y - 1);
				ScanBmp(x - 1, y + 1);
				ScanBmp(x + 1, y);
				ScanBmp(x + 1, y - 1);
				ScanBmp(x + 1, y + 1);
				ScanBmp(x, y - 1);
				ScanBmp(x, y + 1);
			}
		}

	}

	public static void main(String[] args) throws IOException {
		File file = new File("in.bmp");
		BufferedImage bi = ImageIO.read(file);
		width = bi.getWidth();
		height = bi.getHeight();
		ds = new Dian[width][height];
		for (int x = 0; x < width; x++) {
			for (int y = 0; y < height; y++) {
				ds[x][y] = new Dian();
				if (bi.getRGB(x, y) == -1) {
					ds[x][y].value = false;
				} else {
					ds[x][y].value = true;
				}
			}
		}
		for (int y = 0; y < height; y++) {
			for (int x = 0; x < width; x++) {
				result = 0;
				num++;
				nums.add(0);
				ScanBmp(x, y);
				if (result == 0) {
					num--;
					if (visitedNum == height * width) {
						break;
					}
				}
			}
		}
		for (int i = 0; i < num + 1; i++) {
			System.out.println(nums.get(i));
		}
	}
}
改进版:
[code=java]
改进版
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

class Dian {
	public boolean value = false;
	public boolean visited = false;
}

public class LianTong {
	public static Dian ds[][] = null;
	public static int width, height;
	public static int result = 0;
	public static int visitedNum = 0;

	public static void ScanBmp(int x, int y) {
		if (x < 0 || y < 0 || x >= width || y >= height) {
			return;
		}
		if (!ds[x][y].visited) {
			ds[x][y].visited = true;
			visitedNum++;
			if (ds[x][y].value) {
				result++;
				ScanBmp(x - 1, y);
				ScanBmp(x - 1, y - 1);
				ScanBmp(x - 1, y + 1);
				ScanBmp(x + 1, y);
				ScanBmp(x + 1, y - 1);
				ScanBmp(x + 1, y + 1);
				ScanBmp(x, y - 1);
				ScanBmp(x, y + 1);
			}
		}

	}

	public static void main(String[] args) throws IOException {
		File file = new File("in.bmp");
		BufferedImage bi = ImageIO.read(file);
		width = bi.getWidth();
		height = bi.getHeight();
		ds = new Dian[width][height];
		for (int x = 0; x < width; x++) {
			for (int y = 0; y < height; y++) {
				ds[x][y] = new Dian();
				if (bi.getRGB(x, y) == -1) {
					ds[x][y].value = false;
				} else {
					ds[x][y].value = true;
				}
			}
		}
		for (int y = 0; y < height; y++) {
			for (int x = 0; x < width; x++) {
				result = 0;
				ScanBmp(x, y);
				if (result == 0) {
					if (visitedNum == height * width) {
						break;
					}
				}
				else
				{
					System.out.println(result);
				}
			}
		}
	}
}
[/code]



2011蓝桥杯软件设计大赛决赛Java所有试题 2011年第二届蓝桥杯全国软件专业人才设计与开发大赛全国总决赛Java本科高职试题 立即下载

相关推荐

bmp图片黑白转换

bmp颜色转换,从彩色转换成黑白两色,灰度值转换,c语言,gcc

数据结构java版五 图的应用

-图的表示_求补图 图的任何两个顶点间都有边,则称为:完全图。 从完全图中去掉本图的边所得到的图:补图。 不同的表示法如何求一个图的补图? -深度优先遍历_填空题 填空题 如图a 所示的树形结构,从根节点开始的深度遍历是:___________ 如图b 所示的图中,从a节点开始的深度遍历是:_______________        

测试搬运工 1112

蓝桥杯第二届完全真题(c、java)

蓝桥杯软件大赛第二届初赛题目!c语言组和java组都有,完全原题,是我参加第三届比赛前学校给我们的复习资料。感觉第二届和第三届差别挺大的!但是初赛题目算法类型就是这几个!不会超出了

2020年蓝桥杯Java B组第二场题目+部分个人解析

2020年蓝桥杯Java B组第二场题目+部分个人解析

m0_61811926的博客 8815

连通问题 解题报告 ——2011软件大赛决赛 C组 本科第5题 原创By BossDong

连通问题 解题报告 ——2011软件大赛决赛 C组 本科第5题 原创By BossDong BMP是常见的图像存储格式。 如果用来存黑白图像(颜色深度=1),则其信息比较容易读取。 与之相关的数据: (以下偏移均是从文件头开始) 偏移:10字节, 长度4字节: 图像数据真正开始的位置。 偏移:18字节, 长度4字节: 位图的宽度,单位是像素。 偏移:22字节, 长度4字节: 位图的高度,单位是像素。 从图像数据开始处,每个像素用1个二进制位表示。 从图片的底行开始,一行一行向上存储。 Windows规定图像文件中一个扫描行所占的字节数必须是4字节的倍数, 不足的位均以 0 填充。例如,图片宽度为45像素,实际上每行会占用 8个字节。 可以通过Windows自带的画图工具生成和编辑二进制图像。 需要在“属性”中选择“黑白”,指定为二值图像。 可能需要通过 查看 | 缩放 | 自定义... 把图像变大比例一些, 更易于操作。 图像的左下角为图像数据的开始位置。白色对应1,黑色对应0 我们可以定义:两个点距离如果小于2个像素,则认为这两个点连通。 也就是说:以一个点为中心的九宫格中,围绕它的8个点与它都是连通的。 如:t1.bmp 所示,左下角的点组成一个连通的群体; 而右上角的点都是孤立的。 程序的目标是:根据给定的黑白位图,分析出所有独立连通的群体, 输出每个连通群体的面积。所谓面积,就是它含有的像素的个数。 输入数据固定存在in.bmp中。 如示例的in.bmp, 程序应该输出: 12 81 52 133 该输出表示:共有4个连通群体。 输出的连通体面积间的顺序可以随意。 请编程解决上述问题。 我们测试程序的时候,会使用不同的in.bmp文件。 要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。 相关的工程文件不要拷入。 对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性; 不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。

ISP一键下载电路分析+74HC1G66GW(信号图)

之前要不用的最小系统的开发板要不就是用的SWD调试口,没有注意过ISP一键下载电路是个怎么回事,因为需要就简单的看了一下野火的ISP一键下载电路。 默认情况一下,一般我们的程序都是从用户闪存也就是内部的FLASH启动的, 对于F103RCT6来说ROM的大小是512kb,启动地址位0x8000000,这个在IDE keil里可以看的到,如下图。 首先简单理解一下ISP是什么: 可以把他理解为芯片厂商出场时固化在ROM当中的一段程序,它的功能就是把你写的程序一点点的搬运到FLASH当中,它引出了两个引脚

lipengyu1363658871的博客 4862

《人人都是项目经理V2.0》读书笔记——第11章 规划风险管理——无论做什么事,总伴随风险

1. 风险和风险管理计划 在项目管理学科中,风险的定义特别强调两点:风险是不确定的;这种不确定因素对项目有影响。风险管理在生活中常叫做“危机管理”。 事物发展都有不确定性。如果向有利的方向发展,则称之为“机会”,反之则叫做“威胁”。 风险的特点 风险的最大特点就是随时在变。比如,股价波动对于不炒股的人而言不是风险;对于手中持有股票的人而言,股价涨跌分别意味着机会和威胁;而对于无股、想买股票的人而...

EthanAndEvan的博客 842

图生文【学习中】

图生文:提供图像,把图像对应的信息用文本描述出来

qq_19072921的博客 1787

2011蓝桥杯java,2011蓝桥杯Java决赛 连通问题

这周五要进行蓝桥杯的决赛了,把去年的题目做了一下,第五题 连通问题:分享一下:题目:BMP是常见的图像存储格式。如果用来存黑白图像(颜色深度=1),则其信息比较容易读取。与之相关的数据:(以下偏移均是从文件头开始)偏移:10字节, 长度4字节: 图像数据真正开始的位置。偏移:18字节, 长度4字节: 位图的宽度,单位是像素。偏移:22字节, 长度4字节: 位图的高度,单位是像素。从图像数据开始处,...

weixin_39955423的博客 193

手把手教你学simulink实例--基于Simulink的航空航天器飞行轨迹规划与仿真详细介绍

航空航天器飞行轨迹规划是实现高效、安全和精确飞行的关键技术。通过Simulink进行航空航天器飞行轨迹规划与仿真,可以验证控制算法的有效性、优化飞行路径,并降低开发成本。以下是如何在MATLAB和Simulink中设计并仿真一个航空航天器飞行轨迹规划系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的航空航天器飞行轨迹规划与仿真系统。该系统能够根据实时环境变化动态调整飞行轨迹,从而提高飞行效率、降低燃料消耗并提升安全性。

MHD0815的博客 390

(持续更新中!)详解【计算机类&面试真题】军队文职考试 ——第二期(真题+解析)| 网络协议的三个核心要素;交互式系统中的非剥夺策略;中断和陷入的区别;可变分区管理中的硬件机制;数据库系统的优点

本篇博客将讨论军队文职面试(计算机类)的几个关键问题。我们将介绍网络协议的核心要素(帮助你理解网络通信的基本原理)、交互式系统中的非剥夺策略(解释为何这是一个优秀的策略以及其对用户体验、系统稳定性和可预测性的影响)、中断和陷入的区别(从引起原因、处理机制、权限级别和应用等方面进行阐述)、可变分区管理的硬件机制以及数据库系统与文件系统的优点比较。通过阅读本文,您将深入了解这些话题,为面试准备和实际应用提供有价值的知识。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 1707

算法笔记_199:第二届蓝桥杯软件类决赛真题(C语言本科)

  前言:以下代码部分仅供参考,C语言解答部分全部来自网友,Java语言部分部分参考自网友,对于答案的正确性不能完全保证。   试题1   数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。 我们可以通过计算机验证其在有限范围的正确性。 对于大数,简单的循环嵌套是不适宜的。下面的代码给出了一种分解方案。 请仔细阅读,填写空缺的代码(下划线部分)。...

weixin_34343308的博客 149

利用SIMULINK搭建一个16QAM调制解调收发系统

1发送模块设计 根据前面介绍的理论知识,我们可以知道16QAM的基本结构,首先我来设计QAM发送段的SIMULINK仿真模块。 图1 16QAM的发送端模块 他的基本工作流程为:将信号通过两路升余弦滤波器,得到滤波以后的信号,滤波器的作用就是为了防止码间干扰。然后将滤波以后的信号和SIN,COS相乘得到调制信号,将调制 下面一一介绍每个模块的具体参数设置以及各个部分信号的波形图。 图2 产生随机数据的信号源 第一部分信号是产生一组随机的数字,作为信源,第二个模块将信号...

FPGA/MATLAB学习教程/源码/项目合作开发 4776

第十一届蓝桥杯——JAVA组真题

第十一届蓝桥杯——JAVA组真题

weixin_59796310的博客 2万+

PostgreSQL 异常排查:读取流时发生异常 (x80004005)

通过以上步骤,您应该能够解决在 .NET Core 中与 PostgreSQL 数据库进行交互时出现异常 (x80004005) 的问题。确保数据库连接正确,查询语句准确,并使用兼容的驱动程序版本。如有必要,可以捕获异常并查看详细的错误信息,以便更好地排查问题。在使用 .NET Core 开发应用程序时,如果在与 PostgreSQL 数据库进行交互时遇到异常,例如在读取数据流时发生异常 (x80004005),我们需要进行排查和修复。另外,还可以尝试捕获异常并打印异常信息,以便更好地了解问题所在。

XwlyVue的博客 1623

RAGFlow 系列教程 第三课:后端服务入口与请求生命周期

本文深入解析RAGFlow v0.25.0后端核心机制,重点介绍了Quart框架选型原因和服务启动流程。RAGFlow选择Quart作为Web框架,主要基于其异步能力对LLM调用的支持、Flask生态兼容性以及长响应超时处理优势。文章详细拆解了服务启动的8个关键步骤,从日志初始化到HTTP服务启动,并分析了配置加载、数据库初始化等核心环节。通过源码分析揭示了RAGFlow如何实现动态API注册、双重认证体系等关键技术点,为深入理解该系统的请求处理生命周期提供了基础。

weixin_43674738的博客 189

读取in.bmp文件,判断其中哪些点是连通的

读取in.bmp文件,判断其中哪些点是连通的,并求各个连通分量的面积

忆灬凝的博客 472

新手必读!2025最全AI智能体入门手册,50个问题全讲透

感知(Perception):能读取环境,比如读取网页数据、识别用户输入、接入 API;思考(Reasoning/Planning):理解任务目标,规划出行动步骤;行动(Action):调工具、查资料、发消息、写入数据库……直接执行任务。有了这三步,智能体才不是“一个会说话的大模型”,而是真正的“能落地执行的工作代理人”。多个 Agent 分工协作,每个智能体负责一个角色或任务节点,像一个“虚拟团队”。一个爬数据的 Agent,一个提炼要点的 Agent,一个撰写报告的 Agent,

互联网架构师笔记 1972

2011蓝桥杯java试题及部分参考答案

此文由老猫整理,转载请注明出处:http://blog.youkuaiyun.com/nthack5730/article/details/49841549 更多有关老猫的文章:http://blog.youkuaiyun.com/nthack5730

机智猫 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

解析bmp图像(某年全国软件大赛题目)

题目: BMP是常见的图像存储格式。 如果用来存黑白图像(颜色深度=1),则其信息比较容易读取。 与之相关的数据: (以下偏移均是从文件头开始) 偏移:10字节, 长度4字节: 图像数据真正开始的位置。 偏移:18字节, 长度4字节: 位图的宽度,单位是像素。 偏移:22字节, 长度4字节: 位图的高度,单位是像素。 从图像数据开始处,每个像素用1个二进制位表示。 从图片的底...

weixin_30339457的博客 210

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

蓝桥杯_连通性

一、完整代码: import util.*; public class Main { static boolean dfs(char[][] map, int y1, int x1, int y2, int x2) { if(y1 == y2 && x1 == x2) return true; char old = map[y1][...

weixin_38170862的博客 293

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝桥杯.七段码(连通图判断)

蓝桥杯.七段码(连通图判断)

qq_59700927的博客 1927

工信部软件大赛决赛题----统计连通图的个数和面积

题目要求: BMP是常见的图像存储格式。 如果用来存黑白图像(颜色深度=1),则其信息比较容易读取。 与之相关的数据: (以下偏移均是从文件头开始) 偏移:10字节, 长度4字节: 图像数据真正开始的位置。 偏移:18字节, 长度4字节: 位图的宽度,单位是像素。 偏移:22字节, 长度4字节: 位图的高度,单位是像素。 从图像数据开始处,每个像素用1个二进制位表示。

supersnow0622的专栏 1276

蓝桥杯2016_7 剪邮票(dfs判断连通性) + 全排列

题目描述: 如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来,要求必须是连着的。 (仅仅连接一个角不算相连) 比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。     请你计算,一共有多少种不同的剪取方法。 请填写表示方案数目的整数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。 思路:用数组in...

Unyielding will 3719
上一篇: 7 款基于 JavaScript/AJAX 的文件上传插件
下一篇: 告别繁琐的配置文件 ---- 全注解Spring,Hibernate开发 不完全指南
逆乾坤
博客等级 码龄16年 30粉丝 18原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值