信息学奥赛初赛天天练-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;//自动变成匹配的intcout<<"x的值为:"<<x<<endl;float a=10.1;auto y=a;//自动变成匹配的floatcout<<"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.rhkb.cn/news/355086.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数学建模】——【新手小白到国奖选手】——【学习路线】

专栏&#xff1a;数学建模学习笔记 目录 ​编辑 第一阶段&#xff1a;基础知识和工具 1.Python基础 1.学习内容 1.基本语法 2.函数和模块 3.面向对象编程 4.文件操作 2.推荐资源 书籍&#xff1a; 在线课程&#xff1a; 在线教程&#xff1a; 2.数学基础 1.学习内…

Day01 数据结构概述

目录 一、数据结构概述 1、基本概念 2、数据结构 3、逻辑关系&#xff08;线性结构&非线性结构&#xff09; 4、物理结构&#xff08;存储结构&#xff09; 5、算法 6、算法特征 二、时空复杂度 1、时间复杂度 2、空间复杂度 3、结构类型 一、数据结构概述 1、…

计算机网络:网络层 - 虚拟专用网 VPN 网络地址转换 NAT

计算机网络&#xff1a;网络层 - 虚拟专用网 VPN & 网络地址转换 NAT 专用地址与全球地址虚拟专用网 VPN隧道技术 网络地址转换 NAT网络地址与端口号转换 NAPT 专用地址与全球地址 考虑到 IP 地址的紧缺&#xff0c;以及某些主机只需要和本机构内部的其他主机进行通信&…

flutter开发实战-创建一个微光加载效果

flutter开发实战-创建一个微光加载效果 当加载数据的时候&#xff0c;loading是必不可少的。从用户体验&#xff08;UX&#xff09;的角度来看&#xff0c;最重要的是向用户展示加载正在进行。向用户传达数据正在加载的一种流行方法是在与正在加载的内容类型近似的形状上显示带…

算法:分治(归并)题目练习

目录 题目一&#xff1a;排序数组 题目二&#xff1a;数组中的逆序对 题目三&#xff1a;计算右侧小于当前元素的个数 题目四&#xff1a;翻转对 题目一&#xff1a;排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xf…

python 逻辑控制语句、循环语句

文章目录 一、逻辑控制语句&#xff08;if、elif、else&#xff09;1.1 单个条件的逻辑判断语句1.2 多个条件的逻辑判断语句 二、循环语句2.1 while 循环2.2 for 循环2.2.1 循环使用 else 语句 一、逻辑控制语句&#xff08;if、elif、else&#xff09; Python 条件语句是通过一…

el-date-picker 有效时间精确到时分秒 且给有效时间添加标记

el-date-picker实现有效日期做标记且时分秒限制选择范围 代码如下&#xff1a; // html部分 <el-date-pickerv-model"dateTime"type"datetime":picker-options"pickerOptions" > </el-date-picker>// js部分 /*** 回放有效日期开始时…

24年计算机等级考试22个常见问题解答❗

24年9月计算机等级考试即将开始&#xff0c;整理了报名中容易遇到的22个问题&#xff0c;大家对照入座&#xff0c;避免遇到了不知道怎么办&#xff1f; 1、报名条件 2、报名入口 3、考生报名之后后悔了&#xff0c;不想考了&#xff0c;能否退费&#xff1f; 4、最多能够报多少…

Git进阶使用(图文详解)

文章目录 Git概述Git基础指令Git进阶使用一、Git分支1.主干分支2.其他分支2.1创建分支2.2查看分支1. 查看本地分支2. 查看远程分支3. 查看本地和远程分支4. 显示分支的详细信息5. 查看已合并和未合并的分支 2.3切换分支1. 切换到已有的本地分支2. 创建并切换到新分支3. 切换到远…

2-11 基于matlab的BP-Adaboost的强分类器分类预测

基于matlab的BP-Adaboost的强分类器分类预测&#xff0c;Adaboost是一种迭代分类算法&#xff0c;其在同一训练集采用不同方法训练不同分类器&#xff08;弱分类器&#xff09;&#xff0c;并根据弱分类器的误差分配不同权重&#xff0c;然后将这些弱分类器组合成一个更强的最终…

第二十五篇——信息加密:韦小宝说谎的秘诀

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 加密这件事&#xff0c;对于这个时代的我们来说非常重要&#xff0c;那么…

Redis缓存的一些概念性问题

目录 缓存模型和思路 缓存更新策略 数据库和缓存不一致 缓存与数据库双写一致 缓存穿透 缓存雪崩 缓存击穿 速度快,好用&#xff0c;内存的读写性能远高于磁盘,缓存可以大大降低用户访问并发量带来的服务器读写压力 缓存模型和思路 标准的操作方式就是查询数据库之前先…

scratch编程03-反弹球

这篇文章和上一篇文章《scratch3编程02-使用克隆来编写小游戏》类似&#xff08;已经完全掌握了克隆的可以忽略这篇文章&#xff09;&#xff0c;两篇文章都使用到了克隆来编写一个小游戏&#xff0c;这篇文章与上篇文章不同的是&#xff0c;本体在进行克隆操作时&#xff0c;不…

Solr7.4.0报错org.apache.solr.common.SolrException

文章目录 org.apache.solr.common.SolrException: Exception writing document id MATERIAL-99598435990497269125316 to the index; possible analysis error: cannot change DocValues type from NUMERIC to SORTED_NUMERIC for field "opt_time"Exception writing…

账号和权限的管理

文章目录 管理用户账号和组账号用户账号的分类超级用户普通用户程序用户 UID&#xff08;用户id)和(组账号)GIDUID用户识别号GID组标识号 用户账号文件添加用户账号设置/更改用户口令 管理用户账号和组账号 用户账号的分类 超级用户 root 用户是 Linux 操作系统中默认的超级…

Python学习笔记15:进阶篇(四)文件的读写。

文件操作 学习编程操作中&#xff0c;我觉得文件操作是必不可少的一部分。不管是读书的时候学习的c&#xff0c;c&#xff0c;工作的前学的java&#xff0c;现在学的Python&#xff0c;没学过的php和go&#xff0c;都有文件操作的模块以及库的支持&#xff0c;重要性毫无疑问。…

HCIA-速查-ENSP模拟器2步清空配置

需求&#xff1a;清空模拟器配置 清空当前图中配置 步骤1&#xff1a;reset saved-configuration 后输入y确认 步骤2&#xff1a;reboot后输入n否认再输入y确认 验证已经清空配置

idea http client GET 请求 报503错误

idea 提供的 http client 插件&#xff0c;在 GET 请求时总是 报503 的错误&#xff0c;但请求URL可以在浏览器中正常访问。 GET localhost:8080/student Response file saved. > 2024-06-20T160906.503.html 有一种原因跟本地配置的代理有关&#xff0c;如下图。如果在…

基于JSP的高校信息资源共享平台

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对高校信息资源共享平台感兴趣或者有相关需求&#xff0c;可以通过文末的联系方式找到我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDEA…

Java23种设计模式(五)

1、MVC 模式 MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09; - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑&#xff0c;在数据变化时更新控制器。…