2026年6月GESP真题及题解(C++四级):扫雷
题目描述小杨同学正在游玩经典游戏「扫雷」,他想自己生成一个「扫雷」的地图。
小杨同学希望生成的地图大小为n nn行m mm列,一共n × m n \times mn×m个区块。区块行号为1 , 2 , ⋯ , n 1, 2, \cdots, n1,2,⋯,n,列号为1 , 2 , ⋯ , m 1, 2, \cdots, m1,2,⋯,m。其中一些区块为雷区,其它区块不为雷区。
小杨同学指定了q qq个区块为雷区,而其它区块均不为雷区。小杨同学希望你帮忙计算非雷区的区块,每个区块与多少个雷区相邻?
我们定义区块相邻,当且仅当两个区块至少有一个公共顶点(也就是说对于不在地图边缘的区块,周围8 88个区块均与其相邻)。
输入格式输入包含q + 1 q + 1q+1行。
第一行,三个正整数n nn,m mm和q qq,分别表示地图行数和列数,以及雷区数量。
接下来的q qq行,每行有2 22个整数,分别表示第i ii个雷区的行号和列号。
保证输入的雷区不重复。
输出格式输出n nn行,每行m mm个字符(使用空格分割),对于第i ii行第j jj列,输出地图对应区块的信息:
- 如果为雷区,输出
*; - 如果不是雷区,输出其相邻雷区数量(输出0 00到8 88中的一个数字)。
3 4 4 1 1 1 3 2 4 3 2输出 1* 2 * 2 2 3 3 * 1 * 2 1说明/提示输出解释 1根据输入,在3 × 4 3 \times 43×4的地图上有4 44个雷区,分别是( 1 , 1 ) (1,1)(1,1),( 1 , 3 ) (1,3)(1,3),( 2 , 4 ) (2,4)(2,4)和( 3 , 2 ) (3,2)(3,2),如输出样例中*所示,其它非雷区区块的相邻雷区数量可以直观看出。
3 ≤ n , m ≤ 500 3 \le n, m \le 5003≤n,m≤500,1 ≤ q ≤ n ⋅ m 1 \le q \le n \cdot m1≤q≤n⋅m。
输入的雷区必定在地图内且不重复,注意行号和列号均从1 11开始。
思路分析
- 用布尔数组
is[][]标记地雷位置(读入时置true)。 - 遍历整个地图,对每个格子:
- 若为地雷,输出
*; - 否则,用 8 方向偏移数组统计周围地雷个数,输出该数字。
- 若为地雷,输出
- 时间复杂度 O(n·m·8),空间 O(n·m),满足数据范围。
代码实现
#includeusingnamespacestd;intn,m,q;//行、列、雷数boolis[510][510];//标记地雷intdx[8]={-1,-1,-1,0,1,1,1,0};//行偏移intdy[8]={-1,0,1,1,1,0,-1,-1};//列偏移intmain(){cin>>n>>m>>q;for(inti=1;i<=q;i++){intr,c;cin>>r>>c;is[r][c]=true;//标记地雷}for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){if(is[i][j]){//地雷cout<<"*"<<" ";//输出星号和空格}else{//非地雷intcnt=0;//计数器for(intk=0;k<8;k++){//8个方向intnx=i+dx[k];intny=j+dy[k];if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&is[nx][ny])cnt++;//合法且为雷则计数}cout<<cnt<<" ";//输出数字和空格}}cout<<'\n';//换行}return0;}功能分析
输入:读取
n,m,q及q个地雷坐标,标记到is数组中。处理:双重循环遍历每个格子,非雷格子通过 8 方向偏移数组统计邻居地雷数。
输出:每行输出
m个元素,每个元素后跟一个空格。性能:最大 500×500 格子,每个检查 8 次,操作次数约 2×10⁶,轻松通过。
各种学习资料,助力大家一站式学习和提升!!!
#includeusingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}【秘籍汇总】(完整csp信奥赛C++学习资料):
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转
2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转 https://edu.csdn.net/course/detail/41081 点击跳转
3、csp信奥赛高频考点知识详解及案例实践:
CSP信奥赛C++动态规划: https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转
CSP信奥赛C++标准模板库STL: https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转
信奥赛C++提高组csp-s知识详解及案例实践: https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转
4、csp信奥赛冲刺一等奖有效刷题题解:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解: https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转
5、GESP C++考级真题题解:
GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转
GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转
GESP(C++ 七级+八级)真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转
· 文末祝福 ·
#includeusingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}