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) 是考试中最容易失分的题型,建议重点掌握。


相关推荐
zh_xuan1 小时前
c++ Expected用法
开发语言·c++·expected
王老师青少年编程10 小时前
2026年6月GESP真题及题解(C++一级):交税
c++·题解·真题·gesp·一级·2026年6月·交税
疋瓞15 小时前
python和C++对比(1)_数据类型和数据结构
数据结构·c++·python
C语言小火车15 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
ALex_zry16 小时前
C++26 std::complex 结构化绑定详解:auto [re, im] = c
c语言·开发语言·c++
_olone17 小时前
Luogu P2704 [NOI2001] 炮兵阵地
c++·算法·状压dp
c2385617 小时前
互斥锁高频面试题全解:从基础概念到底层实现,一文通关
java·c++·面试·职场和发展
nianniannnn18 小时前
c++复习自存--继承
开发语言·c++
旖-旎18 小时前
《LeetCode 746 使用最小花费爬楼梯 || LeetCode 91 解码方法》
c++·算法·leetcode·动态规划