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

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题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】Spring Boot MyBatis详解(二)

一.解决数据库字段名和对象属性名冲突的问题. 产生这个问题的本质原因就是Java 属性名和数据库字段的命名规范不同. 这个问题的本质就是查询数据库返回了字段,但是不知道和Java对象的哪个属性相对应 1.注解的解决方法 注解的解决方式有三种: 方式一:给数据库字段起别名. 本质…

QT-QPainter实现一个动态充电的电池

1、效果 2、核心代码 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer>

全网最全postman接口测试教程和项目实战~从入门到精通

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

番外篇 | 基于改进YOLOv5的安全帽佩戴检测 | 重参数化结构RepVGG + 空间对象注意力机制RCS-OSA模块

前言:Hello大家好,我是小哥谈。RCS-YOLO是一种目标检测算法,它是基于YOLOv3算法的改进版本。通过查看RCS-YOLO的整体架构可知,其中包括RCS-OSA模块。RCS-OSA模块在模型中用于堆叠RCS模块,以确保特征的复用并加强不同层之间的信息流动。本文针对安全帽佩戴的检测就是基于RC…

[leetcode hot 150]第十五题,三数之和

题目&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复…

RSA 加密算法的基础数论、基本原理与 Python 实现

Title: RSA 加密算法的基础数论、基本原理与 Python 实现 文章目录 前言I. 数学原理1. 整数环2. 单位元3. 欧拉定理 II. 算法原理1. 扩展欧几里得算法2. RSA 非对称加密算法 III. 算法实现1. 源代码2. 测试结果 总结参考文献 前言 1977 年美国 MIT 的三位数学家 Ronald L. Riv…

startActivity启动流程

从桌面点击应用图标开始到Activity创建并执行onCreate&#xff0c;activity的启动涉及到两个进程system_server(AMS所在进程)和Zygote(如果进程没有创建需要先创建) 下图是从点击图标开始执行startActivity&#xff0c;一直到ActivityTaskSupervisor&#xff0c;到ActivityTas…

QT自定义标题栏窗口其二:实现拖动及可拉伸效果 + 顶部全屏/侧边半屏

1、效果 2、核心代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent<

CesiumJS整合ThreeJS插件封装

最近做项目有一个三维需求使用CesiumJS比较难以实现&#xff0c;发现THREEJS中效果比较合适&#xff0c;于是准备将THREEJS整合到CesiumJS中 为实现效果所需我们找到官方Integrating Cesium with Three.js博客&#xff0c;于是根据该博客提供的思路去实现整合 文章目录 一、创…

MySQL快速安装(mysql8.0.30区别之前yum安装)

目录 一.初始化环境并解压 二.创建程序用户管理 三.修改mysql目录和配置文件的权限 四.修改配置文件 五.设置环境变量&#xff0c;申明/宣告mysql命令便于系统识别 六.初始化数据库 七.设置系统识别&#xff0c;进行操作 八.初始化数据库密码 九.用户并设置密码 十.赋…

FinalReference 如何使 GC 过程变得拖拖拉拉

本文基于 OpenJDK17 进行讨论&#xff0c;垃圾回收器为 ZGC。 提示&#xff1a; 为了方便大家索引&#xff0c;特将在上篇文章 《以 ZGC 为例&#xff0c;谈一谈 JVM 是如何实现 Reference 语义的》 中讨论的众多主题独立出来。 FinalReference 对于我们来说是一种比较陌生的 R…

Python - 各种计算器合集【附源码】

计算器合集 一&#xff1a;极简版计算器二&#xff1a;简易版计算器三&#xff1a;不简易的计算器四&#xff1a;还可以计算器 一&#xff1a;极简版计算器 运行效果&#xff1a; import tkinter as tk import tkinter.messagebox win tk.Tk() win.title("计算器")…

如何高效应用与精准选择温补晶振

温补晶振(TCXO)是一种重要的时序元件&#xff0c;因其高精度和高稳定性在通信、导航、测控等多个领域中扮演着关键角色。晶发电子接下来将为您详细阐述温补晶振的选用和使用方法&#xff0c;助您更好地理解和运用这一核心元件。 一、温补晶振的工作原理 温补晶振能够实现在广…

绿茶集团重启IPO:流量渐退、业绩波动,还能讲出好故事吗?

近日&#xff0c;绿茶集团有限公司(下称“绿茶集团”)向港交所递交上市申请&#xff0c;花旗、招银国际为其联席保荐人。 回望绿茶集团的上市之路&#xff0c;可谓有诸多坎坷。该公司于2021年3月首度向港交所发起冲击&#xff0c;但却将中文版招股书中的“流动负债总额”错写成…

1.4自然语言的分布式表示-word2vec实操

文章目录 0写在前面1数据准备2CBOW模型结构的实现3交叉熵损失函数的前向计算3.1关于cross_entropy_error的计算3.2关于softmax 0写在前面 代码都位于&#xff1a;nlp&#xff1b;其他相关内容详见专栏&#xff1a;深度学习自然语言处理基础_骑着蜗牛环游深度学习世界的博客-CS…

深度学习模型训练中 学习率参数 设置大小问题及设置合适值

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

Mybatis Plus 详解 IService、BaseMapper、自动填充、分页查询功能

结构直接看目录 前言 MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 愿景 我们的愿景是成为 MyBatis 最好的搭档&#xff0c;就像 魂斗罗 中的 1P、2P&#xff0c;基友搭配&#xff0c;效…

Linux系统ubuntu20.04 无人机PX4 开发环境搭建(失败率很低)

Linux系统ubuntu20.04 无人机PX4 开发环境搭建 PX4固件下载开发环境搭建MAVROS安装安装地面站QGC PX4固件下载 PX4的源码处于GitHub&#xff0c;因为众所周知的原因git clone经常失败&#xff0c;此处从Gitee获取PX4源码和依赖模块。 git clone https://gitee.com/voima/PX4-…

使用 Python 中的美丽汤进行网络数据解析的完整指南

Beautiful Soup 是一个广泛使用的 Python 库&#xff0c;在数据提取方面发挥着重要作用。它为解析 HTML 和 XML 文档提供了强大的工具&#xff0c;使从网页中轻松提取有价值的数据成为可能。该库简化了处理互联网上非结构化内容的复杂过程&#xff0c;使您可以将原始网页数据转…

【nginx】 nginx核心功能

【nginx】 nginx核心功能 1.nginx核心功能 1. 反向代理 2. 负载均衡 3. 动静分离 4. nginx的高可用2. 反向代理 正向代理: 该服务器代理的是客户端&#xff0c;对于服务器来说&#xff0c;不知道真实客户端的ip。比如: 翻墙软件。 访问国外的服务器---使用了翻墙软件----对…