GESP2026年6月认证C++七级( 第一部分选择题(8-15))精讲


。


第8题 DFS算法思想

1、题目代码:

复制代码
void dfs(int x, int y) {
    vis[x][y] = true;
    for (int k = 0; k < 4; k++) {
        int nx = x + dx[k], ny = y + dy[k];
        if (inside(nx, ny) && a[nx][ny] == 1 && !vis[nx][ny])
            dfs(nx, ny);
    }
}

A. 泛洪算法

B. 二分查找

C. 贪心算法

D. 归并排序

答案:A


2、第一步:先看函数名字

复制代码
dfs(...)

DFS

就是

Depth First Search(深度优先搜索)


3、第二步:看看程序在干什么

(1)它先把当前位置标记

复制代码
vis[x][y]=true;

表示

"我已经来过这里了。"


(2)然后四个方向

复制代码
for(int k=0;k<4;k++)

分别尝试

复制代码
上

下

左

右

(3)如果满足

复制代码
inside(...)

说明没有越界。


(4)再判断

复制代码
a[nx][ny]==1

说明可以走。


(5)再判断

复制代码
!vis[nx][ny]

说明没有访问过。


(6)于是继续递归。

复制代码
dfs(nx,ny);

4、整个过程像什么?

想象一桶蓝色油漆。

倒在地图一个格子。

蓝色不断向四周蔓延。

复制代码
□□□□□

□■■■□

□■■■□

□■■■□

□□□□□

一直扩散。

直到不能扩散。

这就是

Flood Fill(泛洪算法)

因此

答案A。


5、为什么其它错?

(1)B 、二分查找

二分应该看到

复制代码
mid

l

r

这里没有。


(2)C 贪心

贪心会不断选择当前最优。

这里完全没有。


(3)D 归并排序

归并排序一定有

复制代码
分治

merge()

这里没有。



第9题 排序稳定性

答案:

A、 冒泡排序在只交换相邻逆序元素时是稳定排序


1、什么叫稳定排序?

假设有两个学生

复制代码
小王 90

小李 90

原来顺序

复制代码
小王

↓

小李

排序以后

仍然

复制代码
小王

↓

小李

那么就是

稳定排序。


2、看四个选项

(1)A选项

冒泡排序

如果只交换

相邻逆序元素

例如

复制代码
4 3

才交换。

相等

复制代码
5 5

不会交换。

因此

相等元素顺序保持。

稳定。

所以A正确。


(2)B选项

选择排序

每次直接交换最小值。

例如

复制代码
5a

4

5b

交换后

复制代码
4

5b

5a

两个5顺序变了。

所以

选择排序

不稳定。


(3)C选项

快速排序

快速排序交换很多元素。

相等元素位置可能变化。

因此

不稳定。


(4)D选项

稳定排序

恰恰是

不会改变

相等元素顺序。

所以D完全说反了。


3、常考排序稳定性

排序 稳定吗?
冒泡 ✅
插入 ✅
归并 ✅
选择 ❌
快速 ❌
堆排序 ❌


第10题 BFS

答案:

C、 3, 4


1、看图

复制代码
1

├── 2

│   │

│   |

│   │

3── 4

    │

    5

2、开始

队列

复制代码
1

(1)第一步

弹出1

加入

复制代码
2

3

队列

复制代码
2 3

(2)第二步

弹出2

2连接

复制代码
4

于是

加入4

队列变成

复制代码
3 4

(3)这就是

4第一次进入队列

因此答案

C。


3、有的同学容易写成

复制代码
2 3 4

但是题目说的是

根据出队顶点

即

2已经出队了。

所以正确队列

复制代码
3 4


第11题 哈希

答案:

D、6


1、哈希函数

复制代码
h(x)=x%11

2、模拟操作:

(1)插入22

复制代码
22%11=0

放0

复制代码
0

(2)插入33

复制代码
33%11=0

冲突。

线性探测。

去1。

放1。


(3)插入4

复制代码
4

放4。


(4)插入15

复制代码
15%11=4

冲突。

去5。

放5。


(5)插入26

复制代码
26%11=4

4占了。

5占了。

继续

6空。

放6。


(6)因此答案

D。


3、线性探测口诀

冲突以后

复制代码
+1

+1

+1

......

直到空位


第12题 哈希冲突

答案:

B


1、链地址法

就是

一个桶

里面放很多元素。


2、例如

复制代码
桶3

↓

22

↓

33

↓

44

都可以。

因此

B正确。


3、其它为什么错?

(1)选项A

冲突当然还能继续插。

错误。


(2)选项C

再好的哈希

也可能冲突。

例如

复制代码
11

22

都会到0。


(3)选项D

开放定址法

查找必须沿探测序列继续找。

否则找不到。



第13题 时间复杂度

答案:

B、O(nlogn)


1、题目说

(1)枚举

复制代码
n

个对象。

每个对象

做一次

二分。


(2)枚举

复制代码
O(n)

(3)二分

复制代码
O(logn)

2、总复杂度

就是乘法。

复制代码
n

×

logn

即

复制代码
O(nlogn)

答案B。


3、时间复杂度口诀

(1)连续执行

复制代码
+

(2)嵌套循环

复制代码
×

(3)所以

复制代码
n

×

logn


第14题 二分查找

答案:

B、 令闭区间左边界变为 mid + 1


1、看题目

找

第一个 ≥x


(1)假设

复制代码
1

3

5

7

9

找

复制代码
6

(2)现在

mid

等于5。

复制代码
5<6

说明

5太小。

以及

左边全部都太小。

因此

全部不要。

左边界移动。

复制代码
l=mid+1;

(3)答案

B。


2、为什么?

(1)因为

复制代码
mid

都不够。

不包含mid

(2)所以

答案一定在

复制代码
右边

3、二分四大模板

寻找目标 mid满足条件后
第一个≥x l=mid+1(当amid<x)
第一个>x l=mid+1(当amid<=x)
最后一个≤x r=mid-1(当amid>x)
最后一个<x r=mid-1(当amid>=x)


第15题 网格DP

答案:

D、8


1、看地图

复制代码
. . . . .

. # . # .

. . . . .

# . # . .

. . . . .

(1)其中

复制代码
#

不能走。


(2)只能

复制代码
↓

→

(3)这是标准

网格路径计数DP


2、状态定义:

复制代码
dp[i][j]

表示走到这里的方法数

3、状态转移:

复制代码
dp[i][j]

=

上面的路径数

+

左边路径数

即

复制代码
dp[i][j]=dp[i-1][j]+dp[i][j-1];

4、遇到障碍

复制代码
#

直接

复制代码
dp=0

逐格计算完整张DP表后,可以得到终点路径总数,对应选项 D。


第一部分(8~15题)知识点总结

题号 知识点 考试重点
8 DFS、Flood Fill 四方向搜索、递归、访问标记
9 排序稳定性 稳定排序与不稳定排序的区别
10 BFS 队列变化过程、首次入队时机
11 哈希表 线性探测法处理冲突
12 哈希冲突 链地址法、开放定址法
13 时间复杂度 O(nlogn) 的推导
14 二分查找 四大边界模板
15 网格动态规划 路径计数、障碍物处理

这一组题目基本涵盖了 DFS、BFS、哈希、排序、二分、动态规划 。其中 第10题(BFS队列变化)、第14题(二分边界)、第15题(网格DP) 是考试中最容易失分的题型,建议重点掌握。


相关推荐
Rabitebla10 小时前
【Linux 底层原理】进程(十):进程等待详解---从僵尸进程到 wait、waitpid 与 status
linux·c++·笔记·学习·visual studio
西西弗Sisyphus12 小时前
C++ 超时互斥锁(Timed Mutex):std::timed_mutex 与 std::unique_lock
c++
今天要早睡_15 小时前
C++01_入门基础复习
开发语言·c++
Fuyo_111917 小时前
C++ 运行时多态与虚函数机制全面剖析【面试重点】
开发语言·c++·面试
Chen_harmony19 小时前
七、STL与string类
开发语言·c++
xxxiugou12319 小时前
C++命名空间与引用全解析
开发语言·c++
用户76241175670520 小时前
第十五章 人工智能基础
c++
爱写Bug的浮游1 天前
unique_ptr 零开销的真相与边界
c++·facebook
xiaoye-duck1 天前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(下):流式响应实现和测试
网络·c++·语言模型·chatgpt
落樱弥城1 天前
Perf 逐步探查性能缺口并优化
c++·性能优化