[NOIP2015 普及组] 扫雷游戏 题解

Noip2015普及组题解:扫雷游戏(C++) 题目描述 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。 注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。 输入描述: 输入文件第一行是用一个空格隔开的两个整数n和m, 阅读详情

题意

给定一个n∗mn * mn∗m的地图, "∗*∗"表示雷, "???"表示不是雷, 统计对于每个(i,j)(i, j)(i,j)的八连通有多少个雷。

解析

一道非常简单的枚举题。
可以枚举每个雷, 再枚举它的八连通, 如果这个位置(nx,ny)(nx, ny)(nx,ny)合法且是不是雷, 则结果数组ans[i][j]++ans[i][j]++ans[i][j]++(表示在他的周围发现了一个雷)。最后输出,如果(i,j)(i, j)(i,j)位置不是雷,则输出ans[i][j]ans[i][j]ans[i][j], 反之输出’∗*∗'(题目要求)。

怕有人不会写方位数组八连通
在这里插入图片描述
将其抽象成相对于(i,j)(i, j)(i,j)的偏移量,即可得到方位数组。

int dx[] = {1, 1, 1, 0, 0, -1, -1, -1};
int dy[] = {1, 0, -1, 1, -1, 1, 0, -1};

然后就可以遍历方位数组,即可得到当前选择的位置(nx,ny)(nx, ny)(nx,ny)。记得判断这个位置是否合法,否则小心RTE

int nx = i + dx[k];
int ny = j + dy[k];

标程

int a[MAXN][MAXN]; // 是否有雷,1表示有雷,0表示无雷
int ans[MAXN][MAXN]; // 结果数组
int dx[] = {1, 1, 1, 0, 0, -1, -1, -1}; // 方位数组
int dy[] = {1, 0, -1, 1, -1, 1, 0, -1};
int n, m;
bool check(int a, int b) { // 判断(a, b)是否在合法范围内
    return a >= 1 && b >= 1 && a <= n && b <= m;
}
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            char c;
            cin >> c;
            if (c == '*') {
                a[i][j] = 1; // 转换成bool方便判断
            }
        }
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            if (a[i][j]) {
                for (int k = 0; k < 8; ++k) { // 枚举(i, j)的八连通,并计算ans[i][j]
                    int nx = i + dx[k];
                    int ny = j + dy[k];
                    if (check(nx, ny) && !a[nx][ny]) { // 如果(nx, ny)在合法范围内且不是雷
                        ++ans[nx][ny];
                    }
                }
            }
        }
      // 输出......
    }

后记

一道简单的枚举题。

题解:洛谷 P2670 [NOIP 2015 普及组] 扫雷游戏 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。个字符,描述了雷区中的地雷分布情况。字符 * 表示相应格子是地雷格,字符?注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。用 * 表示地雷格,用周围的地雷个数表示非地雷格。列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。 阅读详情

相关推荐

Ubuntu22.04实战:基于VLLM高效部署Qwen3系列模型并构建Dify智能体

本文详细介绍了在Ubuntu22.04系统上使用VLLM高效部署Qwen3系列模型并集成Dify平台的实战指南。从环境配置、Conda管理到VLLM优化部署,再到Dify智能体构建,提供了全面的技术方案和性能调优建议,帮助开发者快速实现AI模型的高效部署与应用。

weixin_28323057的博客 161

【洛谷】 P2670 [NOIP2015 普及组] 扫雷游戏

扫雷游戏是一款十分经典的单机小游戏。在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。 现在给出 n 行 m 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。 注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。 #include<bits/stdc++.h

SG_teresa's blog 918

记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL

【代码】记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL。

m0_74824002的博客 841

P2670 [NOIP2015 普及组] 扫雷游戏

NOIP2015 普及组 T2。

qq_63524016的博客 732

Xiaojie雷达之路---使用CCS创建一个毫米波雷达的工程(AWR1843)

前些天,在工具箱中下载了一个基于毫米波雷达(AWR1843)自动停车的案例,并成果导入CCS中,可以完美运行,但是如何新建一个新的工程呢?这篇文章就会对其进行讲述。

XiaoJie的博客 4548

STM32实战:电容触摸屏I2C转USB HID设备全解析

本文详细解析了基于STM32的电容触摸屏I2C转USB HID设备实现方案。通过硬件选型、协议分析和代码实现,展示了如何将GT911触摸屏数据转换为标准USB HID协议,并提供了关键调试经验与性能优化技巧,为智能家居控制面板等应用提供高性价比解决方案。

weixin_42548829的博客 320

[NOIP2015 普及组] 扫雷游戏 解题思路及代码

总结下这题:就我的暴力解法没啥思维难点;唯一值得注意的点是在二维数组读入的时候,要注意从下标1处写入数据,否则在边角的点会在寻找地雷时出现数组越界。这样的做法也巧妙解决了边和角要特别拿出来的情况,减少了代码的逻辑复杂度。P2670 [NOIP2015 普及组] 扫雷游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)by————23203.11.05刷题记录。

sorryhorizon_L的博客 304

shader基于高度的权重混合

效果图: 基于高度的权重混合 , 效果描述: (1)混合:三层混合, 例如 第一层是草,第二层是石头,第三层是沙子,三者混合显示 (2)权重: 三层的权重的和 为1, 三者是此消彼长的关系 (3)高度:高度会限制或者说是 束缚 着 效果 关于混合,再多说几句: (1)基于权重的混合:权重 ,跟顺序没有关系 只跟权重的大小有关系(在一层一层界限不清晰的地方,特别适用!!效果极好!!!!) (2)基于叠加的混合: 叠加 就是 一层一层的往上加。。。。 所以顺序特别重要(在雪地等效果中使用:因为

木马人 1117

扫雷游戏

扫雷游戏 发布时间: 2017年8月15日 22:17 最后更新: 2017年8月15日 22:21 时间限制: 1000ms 内存限制: 128M 描述 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不...

weixin_30326515的博客 449

Open3D (C++)球旋转算法(BPA)三维建模

球旋转算法用于点云三维建模的C++代码实现。

点云侠的博客 1770

【WorkBuddy专栏40】从「帮你干活」到「帮你创造」——WorkBuddy设计创意功能深度拆解

【WorkBuddy专栏40】从「帮你干活」到「帮你创造」——WorkBuddy设计创意功能深度拆解

AI人人懂 1292

P2670[NOIP 2015普及组]扫雷游戏 题解

P2670[NOIP 2015普及组]扫雷游戏 题解

2501_91441215的博客 1266

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

洛谷 P2670 [NOIP 2015 普及组] 扫雷游戏 P1045 [NOIP 2003 普及组] 麦森数 P1328 [NOIP 2014 提高组] 生活大爆炸版石头剪刀布 python题解

本文聚焦洛谷 P2670、P1045、P1328 三道题,用 Python 解析:P2670 讲扫雷模拟的网格遍历与计数;P1045 拆解麦森数的大数处理与快速幂;P1328 梳理石头剪刀布的逻辑判断,最后提炼共性技巧并给出练习建议

m0_58066727的博客 737

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

P2670 [NOIP2015 普及组] 扫雷游戏 题解

P2670 [NOIP2015 普及组] 扫雷游戏 题解

yaosichengalpha的博客 1115

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

P2670 [NOIP 2015 普及组] 扫雷游戏 题解

本来打算把从0开始c++第三章变量的发出来,但我实在过于懒了,所以拖更,发篇题解凑合一下而且不在web上写了,所以可能会与之前的风格不一样。

HaPpYhApPYher的博客 1025

【洛谷题解】P2670 [NOIP2015 普及组] 扫雷游戏

这道题考察对字符数组的使用,对了,这可是NOIP2015 普及组第二题哦。

一个学生的博客 1481

【题解】【洛谷P2670】【模拟】—— [NOIP2015 普及组] 扫雷游戏

平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。个字符,描述整个雷区。

Pantheraonca的博客 850

洛谷题解 - P2670 [NOIP2015 普及组] 扫雷游戏

列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。表示地雷格,用周围的地雷个数表示非地雷格。列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。表示相应格子是非地雷格。个字符,描述了雷区中的地雷分布情况。表示相应格子是地雷格,字符。

Python_enjoy 是一个大帅哥! 1196

【题解·洛谷】P2670 [NOIP2015 普及组] 扫雷游戏

洛谷P2670 题解

qq_56897740的博客 1392

P2670 [NOIP2015 普及组] 扫雷游戏 java题解

P2670 [NOIP2015 普及组] 扫雷游戏

m0_62905261的博客 676

洛谷题解P2670 [NOIP2015 普及组] 扫雷游戏

洛谷P2670 [NOIP2015 普及组] 扫雷游戏 要找到一个格子的周围格子包括其 上(0,1)、下(0,-1)、左(-1,0)、右(1,0)、 左上(-1,1)、右上(1,1)、左下(-1,-1)、右下(1,-1) 八个方向上与之直接相邻的格子,可以用两个数组dx[8]、dy[8]来搜索地地雷的位置 搜索到地雷之后在数组sum[ ][ ]相应的位置上自增。 #include<iostream> using namespace std; char map[105][105]; int sum

功不唐捐的博客 3114

P2670 [NOIP2015 普及组] 扫雷游戏(题解)

在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。字符 ** 表示相应格子是地雷格,字符?用 ** 表示地雷格,用周围的地雷个数表示非地雷格。注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。现在给出 n 行 m 列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。

2401_83239953的博客 896

P2670 [NOIP 2015 普及组] 扫雷游戏P2670 [NOIP 2015 普及组] 扫雷游戏 (python题解)

这可是我迄今为止写过最长的代码了!

wuruichen2013的博客 148
上一篇: NOIP 2002 普及组第二题 “选数“ 题解
下一篇: CSP-J 2024 T1扑克牌题解
Cat.exe
博客等级 码龄1年 16粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值