信息学奥赛初赛天天练-30CSP-J2022完善程序-结构体构造函数初始化、auto关键字、连通块、洪水填充算法实战

news2024/12/23 2:12:27

PDF文档公众号回复关键字:20240620

在这里插入图片描述

2022 CSP-J 阅读程序2

完善程序 (单选题 ,每小题3分,共30分)

2 (洪水填充) 现有用字符标记像素颜色的8 * 8图像。颜色填充操作描述如下:给定起始像素的位置和待填充的颜色,将起始像素和所有可达像素(可达的定义:经过一次或多次的向上、下、左、右四个方向移动所能到达且终点和路径上所有像素的颜色都与起始像素颜色相同),替换为给定的颜色

试补全模拟程序

01 #include<bits/stdc++.h>
02 using namespace std;
03 
04 const int ROWS = 8;
05 const int COLS = 8;
06 
07 struct Point{
08     int r,c;
09     Point(int r,int c):r(r),c(c){}
10 }; 
11 
12 bool is_valid(char image[ROWS][COLS],Point pt,
13             int prev_color,int new_color){
14     int r=pt.r;
15     int c=pt.c;
16     return (0<=r&&r<ROWS&&0<=c && c<COLS &&
17             --1-- && image[r][c]!=new_colr);                
18 }
19 
20 void flood_fill(char image[ROWS][COLS],Point cur,int new_color){
21     queue<Point> queue;
22     queue.push(cur);
23     
24     int prev_color=image[cur.r][cur.c];
25     --2--;
26     
27     while(!queue.empty()){
28         Point pt=queue.front();
29         queue.pop();
30         
31         Point point[4]={--3--,Point(pt.r-1,pt.c),
32                         Point(pt.r,pt.c+1),Point(pt.r,pt.c-1)}
33         for(auto p:points){
34             if(is_valid(image,p,prev_color,new_color)){
35                 --4--;
36                 --5--;
37             }
38         }
39     }    
40 }
41 
42 int main(){
43     char image[ROW][COLS]={{'g','g','g','g','g','g','g','g'},
44                            {'g','g','g','g','g','g','r','r'},
45                            {'g','r','r','g','g','r','g','g'},
46                            {'g','b','b','b','b','r','g','r'},
47                            {'g','g','g','b','b','r','g','r'},
48                            {'g','g','g','b','b','b','b','r'},
49                            {'g','g','g','g','g','b','g','g'},
50                            {'g','g','g','g','g','b','b','g'}};
51     
52     Point cur(4,4);
53     char new_color ='y';
54     
55     flood_fill(image,cur,new_color);
56     
57     for(int r=0;r<ROWS;r++){
58         for(int c=0;c<COLS;c++){
59             cout<<image[r][c]<<" ";
60         }
61         cout<<endl;
62     }
63     // 输出
64     // g g g g g g g g
65     // g g g g g g r r
66     // g r r g g r g g
67     // g y y y y r g r
68     // g g g y y r g r
69     // g g g y y y y r
70     // g g g g g y g g
71     // g g g g g y y g
72     
73     return 0;
74 }

40.①处应填( )

A. image[r] [c] == prew_color

B. image[r] [c] != prew_color

C. image[r] [c] == new_color

D. image[r] [c] != new_color

41.②处应该填( )

A. image[cur.r+1] [cur.c] == new_color

B. image[cur.r] [cur.c] == new_color

C. image[cur.r] [cur.c+1] == new_color

D. image[cur.r] [cur.c] == prew_color

42.③处应该填( )

A. Point(pt.r,pt.c)

B. Point(pt.r,pt.c+1)

C. Point(pt.r+1,pt.c)

D. Point(pt.r+1,pt.c+1)

43.④处应该填( )

A. Prew_color = image[p.r] [p.c]

B. new_color = image[p.r] [p.c]

C. image[p.r] [p.c]=prev_color

D. image[p.r] [p.c] =new_color

44.⑤处应该填( )

A. queue.push§;

B. queue.push(pt)

C. queue.push(cur)

D. queue.push(Point(ROWS,COLS))

2 相关知识点

1) 结构体构造方法

//1 不指定构造函数
#include<bits/stdc++.h>
using namespace std;
/*
  定义结构体 包括2个成员x和y 
*/
struct xy{
	int x;
	int y;
};

int main(){
	xy xy1;//声明结构体变量xy1 
	xy1.x=1;//对成员变量x赋值 
	xy1.y=2;//对成员变量y赋值 
	cout<<xy1.x<<" "<<xy1.y;//输出成员变量x和y 
	return 0;
}
//2 结构体赋值构造函数
#include<bits/stdc++.h>
using namespace std;

/*
  结构体构造函数体内为成员变量赋值 
*/
struct xy{
	int x;
	int y;
	//和结构体名称相同的函数称为构造函数 
	xy(int _x,int _y){//通过构造函数对成员变量赋值 
		x=_x;
		y=_y;
	}
}; 

int main(){
	xy xy1=xy(1,2);//通过构造函数传入参数给成员变量x,y 
	cout<<xy1.x<<" "<<xy1.y;//输出成员变量x和y 
	return 0;
}
// 3 初始化列表初始化成员的构造函数
#include<bits/stdc++.h>
using namespace std;
/*
  C++提供了给成员变量初始化并赋值的方式,这就是初始化列表。
  在构造函数的()后,{}之前写,格式是冒号+成员名(初始值),
  对与自定义类型则是调用它的构造函数初始化
*/
struct xy{
	int x;
	int y;
	xy(int x,int y):x(x),y(y){}//初始化列表方式对成员变量进行初始化 
};

int main(){
	xy xy1=xy(1,2);//通过构造函数传入参数给成员变量x,y 
	cout<<xy1.x<<" "<<xy1.y;//输出成员变量x和y 
	return 0;
}

2) 子图

设G = <V,E>, G’ = <V’,E’>为两个图(同为无向图或同为有向图),若V’∈ V 且 E’∈E,则称G’是G的子图,G是G’的母图

3) 极大连通子图

对于图的某一子图,它包含了图中尽可能多的顶点以及尽可能多的边,以至于它再加上一个点或者边之后它就不连通了,此时这个图就是极大连通子图

4) 连通分量

无向图G的极大连通子图称为G的连通分量

5) 连通块

连通块(Connected Components),也称为连通分量,是图论中的一个概念

6) 洪水填充 flood fill

洪水填充是CSP-J需要掌握的一个知识点

具体过程从一个起始节点开始,把附近与其连通的节点提取出或填充成不同颜色颜色,直到封闭区域内的所有节点都被处理过为止

洪水填充主要是找有多少个连通块及每个连通块的大小等

7) auto 关键字

C++11引入了auto类型说明符,它允许在声明变量的时候根据变量初始化表达式的类型自动为变量选择匹配的类型。

通过使用auto,我们不需要手动指定变量的类型,而是让编译器来为我们推断变量的类型

#include<bits/stdc++.h>
using namespace std;
/*
  它允许在声明变量的时候根据变量初始化表达式的类型自动为变量选择匹配的类型。
  通过使用auto,我们不需要手动指定变量的类型,而是让编译器来为我们推断变量的类型
*/ 

int main(){
	auto x = 42;//自动变成匹配的int
	cout<<"x的值为:"<<x<<endl;
	float a=10.1;
	auto y=a;//自动变成匹配的float
	cout<<"y的值为:"<<y<<endl; 
	return 0;
}

自动推断出结构体类型示例

#include<bits/stdc++.h>
using namespace std;
/*
  自动推断出结构体类型
*/ 
struct xy{
	int x,y;
	xy(int x,int y):x(x),y(y){}
};
int main(){
	xy list[4]={xy(1,2),xy(3,4),xy(5,6),xy(7,8)};
	for(auto t:list){
		cout<<t.x<<" "<<t.y<<endl;
	}
	return 0;
}

上面代码需要在C++11编译器运行,DEV-C++设置方法如下

工具–编译器选项进入

进入编译器选项进行设置

设置好语言标准为C++11后,重新编译即可

3 思路分析

40.①处应填( )

A. image[r] [c] == prew_color

B. image[r] [c] != prew_color

C. image[r] [c] == new_color

D. image[r] [c] != new_color

分析

/*
 此方法判断是否可以继续填充,继续填充遵循3个规则
 不越界,颜色相同,不重复走
 0<=r&&r<ROWS&&0<=c && c<COLS -- 不越界
 image[r][c]!=new_colr --不是新颜色才走,表示不重复走
 缺少颜色相同,必须和之前颜色相同时才填充 
 所以判断当前格是否和之前颜色相同 image[r] [c] == prew_color
*/
12 bool is_valid(char image[ROWS][COLS],Point pt,
13             int prev_color,int new_color){
14     int r=pt.r;
15     int c=pt.c;
16     return (0<=r&&r<ROWS&&0<=c && c<COLS &&
17             --1-- && image[r][c]!=new_colr);                
18 }

41.②处应该填( B )

A. image[cur.r+1] [cur.c] = new_color

B. image[cur.r] [cur.c] = new_color

C. image[cur.r] [cur.c+1] = new_color

D. image[cur.r] [cur.c] = prew_color

分析

/*
  填充起点,起点也需要涂成新颜色
  所以把新颜色new_color赋值给image[cur.r] [cur.c]
*/
24     int prev_color=image[cur.r][cur.c];
25     --2--;

42.③处应该填( C )

A. Point(pt.r,pt.c)

B. Point(pt.r,pt.c+1)

C. Point(pt.r+1,pt.c)

D. Point(pt.r+1,pt.c+1)

分析

/*
  需要向 向上、下、左、右四个方向填充
  如下point数组往4个方向拓展
  Point(pt.r-1,pt.c) --向上
  Point(pt.r,pt.c+1) --向右
  Point(pt.r,pt.c-1) --向左
  还缺少向下r+1
  所以是 Point(pt.r+1,pt.c)
*/
31         Point point[4]={--3--,Point(pt.r-1,pt.c),
32                         Point(pt.r,pt.c+1),Point(pt.r,pt.c-1)}

43.④处应该填( )

A. Prew_color = image[p.r] [p.c]

B. new_color = image[p.r] [p.c]

C. image[p.r] [p.c]=prev_color

D. image[p.r] [p.c] =new_color

分析

/*
  如果拓展的这个格子p,不出界,颜色相同,没填充过
  则把这个格子用新颜色填充- image[p.r] [p.c] =new_color
  放入队列,下次从队列中取出继续拓展 queue.push(p);
*/
33         for(auto p:points){
34             if(is_valid(image,p,prev_color,new_color)){
35                 --4--;
36                 --5--;
37             }
38         }

44.⑤处应该填( A )

A. queue.push§;

B. queue.push(pt)

C. queue.push(cur)

D. queue.push(Point(ROWS,COLS))

分析

参考43题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1843647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

山东华素制药有限公司:素心做药,感恩回报

在山东威海这片美丽的土地上,有一颗璀璨的明珠——山东华素制药有限公司。自2013年成立以来,这家企业以其深厚的制药底蕴、卓越的研发实力和坚定的社会责任,赢得了社会各界的广泛赞誉。它不仅是化学药品制剂制造的佼佼者,更是“素心做药,感恩回报”的典范。 一、素心做药,品质为…

Android Compose 文本输入框TextField使用详解

一、 TextField介绍 TextField 允许用户输入和修改文本&#xff0c;也就是文本输入框。 TextField 分为三种&#xff1a; TextField是默认样式OutlinedTextField 是轮廓样式版本BasicTextField 允许用户通过硬件或软件键盘修改文本&#xff0c;但不提供提示或占位符等装饰&a…

【机器学习】机器学习重要方法—— 半监督学习:理论、算法与实践

文章目录 引言第一章 半监督学习的基本概念1.1 什么是半监督学习1.2 半监督学习的优势 第二章 半监督学习的核心算法2.1 自训练&#xff08;Self-Training&#xff09;2.2 协同训练&#xff08;Co-Training&#xff09;2.3 图半监督学习&#xff08;Graph-Based Semi-Supervise…

C++基础知识——命名空间

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan. 文章目录 1、什么是命名空间2、命名空间的作用3、如何定义命名…

总结之LangChain(一)—— 简单使用LangChain

LangChain介绍 LangChain官网&#xff1a;https://python.langchain.com/v0.2/docs/introduction/ LangChain 是一个基于大型语言模型&#xff08;LLM&#xff09;开发应用程序的框架。 LangChain 简化了LLM应用程序生命周期的每个阶段&#xff1a; 开发&#xff1a;使用 L…

JavaSE 利用正则表达式进行本地和网络爬取数据(爬虫)

爬虫 正则表达式的作用 作用1&#xff1a;校验字符串是满足规则 作用2&#xff1a;在一段文本中查找满足需要的内容 本地爬虫和网络爬虫 Pattern类 表示正则表达式 Matter类 文本编译器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取&#xf…

Everything 一款功能强大的搜索工具

要在电脑上使用Everything搜索文件&#xff0c;您需要使用以下步骤&#xff1a; 在您的电脑上下载并安装Everything软件。您可以从官方网站https://www.voidtools.com/downloads/下载最新版本的软件。 安装完成后&#xff0c;打开Everything软件。 在搜索栏中输入您要查找的文…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 连续字母长度(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

手把手教你如何部署自己的One Tool助手

手把手教你如何部署自己的One Tool助手 前言安装教程效果图在这里插入图片描述 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0fc5cb0f451e4c50b55ec850a5517b0c.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/56331f878b9545d5bff6f938c4b317…

uniapp 项目,用HBuilder X在小程序端 运行项目,发布项目

1. 运行项目&#xff08;直接在微信开发者工具中导入项目&#xff0c;运行项目会报错&#xff0c;要通过HBuilder X运行项目&#xff09; 1.1 配置内容&#xff0c;必须是该小程序的开发者才能运行 查看appid, 项目 -- manifest.json 文件 -- 微信小程序配置 -- APPID 小程序…

用国内首家文生软件平台生成一个整蛊拼图小游戏是什么体验?

前言&#xff1a; 众所周知&#xff0c;2023年是中国大模型发展的元年&#xff0c;以ChatGPT3.5为代表的初代语言大模型横空出世&#xff0c;直接掀起了一阵全球范围内的AIGC浪潮。 在中国大模型追星赶月的这一年&#xff0c;技术迭代日新月异&#xff0c;行业趋势不断变化&a…

RabbitMQ 学习笔记

RabbitMQ学习笔记 一些概念 Broker &#xff1a;RabbitMQ服务。 virtual host&#xff1a; 其实就是分组。 Connection&#xff1a;连接&#xff0c;生产者消费者与Broker之间的TCP连接。 Channel&#xff1a;网络信道&#xff0c;轻量级的Connection&#xff0c;使用Chann…

基于SpringBoot+Vue北部湾地区助农平台设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

Centos SFTP搭建

SFTP配置、连接及挂载教程_sftp连接-CSDN博客1、确认是否安装yum list installed | grep openssh-server 2、创建用户和组 sudo groupadd tksftpgroup sudo useradd -g tksftpgroup -d /home/www/tk_data -s /sbin/nologin tksftp01 sudo passwd tksftp013. 配置SFTP注意&a…

【ElasticSearch】ElasticSearch基本概念

ES 是一个开源的高扩展的分布式全文检索引擎&#xff0c;它是对开源库 Luence 的封装&#xff0c;提供 REST API 接口 MySQL 更适合数据的存储和关系管理&#xff0c;即 CRUD&#xff1b;而 ES 更适合做海量数据的检索和分析&#xff0c;它可以秒级地从数据库中检索出我们感兴…

数据结构和算法之复杂度比较

数据结构和算法之复杂度比较 参考如下网址&#xff1a;https://www.bigocheatsheet.com/ 方便快速查询 1. 复杂度比较 2. 常见数据结构复杂度 3. 常见算法复杂度

计网课设-发送TCP数据包

一、效果展示 二、代码实现 import nmap import socket import tkinter as tk from tkinter import messagebox,Listbox from threading import Thread#获取自身IP&#xff0c;从而确定当前局域网范围 def get_ip_address():#创建了一个socket对象&#xff0c;socket.AF_INET表…

计算机网络:应用层 - 文件传输协议 FTP 电子邮件

计算机网络&#xff1a;应用层 - 文件传输协议 FTP & 电子邮件 文件传输协议 FTP电子邮件 文件传输协议 FTP 文件传送协议 FTP(File Transfer Protocol)&#xff0c;曾是互联网祝频讲解上使用得最广泛的文件传送协议。 其特点是&#xff1a;若要存取一个文件&#xff0c;…

【ARMv8/v9 GIC 系列 3 -- GIC 的 类型寄存器 GICD_TYPER】

文章目录 GIC 类型寄存器 GICD_TYPERESPI_Range, 位[31:27]RSS, 位[26]No1N, 位[25]A3V, 位[24]IDBits, 位[23:19]DVIS, 位[18]LPIs, 位[17]MBIS, 位[16]NUM_LPIs, 位[15:11]SecurityExtn, 位[10]NMI, 位[9]ESPI, 位[8]CPUNumber, 位[7:5]ITLinesNumber, 位[4:0]GIC 类型寄存器…

嵌入式实验---实验四 DMA传输实验

一、实验目的 1、掌握STM32F103DMA传输程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、利用外部按键KEY1来控制DMA的传送&#xff0c;每按一次KEY1&#xff0c;DMA就传送一次数据到USART1&#xff08;串口1&#xff09;&#xff1b; 2、该串口…