P2670 [NOIP2015 普及组] 扫雷游戏
1.题目介绍
[NOIP2015 普及组] 扫雷游戏
题目背景
NOIP2015 普及组 T2
题目描述
扫雷游戏是一款十分经典的单机小游戏。在
现在给出
注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。
输入格式
第一行是用一个空格隔开的两个整数
接下来
输出格式
输出文件包含
样例 #1
样例输入 #1
3 3
*??
???
?*?
样例输出 #1
*10
221
1*1
样例 #2
样例输入 #2
2 3
?*?
*??
样例输出 #2
2*1
*21
提示
对于
2.题解
2.1 模拟
思路
1.这里我们首先是会用两个数组dx,dy;这样后面方便表示周围的8个数,另外注意一般题设均是行(竖)-> 列(横),为了方便对应x,y;我们修改了坐标系如下
2.边界问题:访问周围的8个数,很有可能导致数组越界,有两种处理方式,一种是进行越界判断,一种是加入一层虚拟边界,下述程序用的是第二种
代码
#include<bits/stdc++.h>
using namespace std;
const int dx[] = {1,1,1,0,0,-1,-1,-1};
const int dy[] = {-1,0,1,-1,1,-1,0,1};
const int maxn = 105;
char g[maxn][maxn];
int main(){
int n , m;
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> g[i][j];
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
//这里使用了一些偷懒的技巧,没有加上一圈“虚拟边框”,但不影响判断
//这里的数组g[maxn][maxn] 自动初始化为 '\0',而我们一个是这里g[i][j]均是从索引1开始,所以相当于自动加了一层虚拟边界
// 后续直接通过判断四周八个点是否为'*' 即可,边界'\0'不会有任何影响
if(g[i][j] != '*'){
int cnt = 0;
for(int m = 0; m < 8; m++){
if(g[i+dx[m]][j+dy[m]] == '*') cnt++;
}
cout << cnt;
}
else cout << '*';
}
cout << endl;
}
}
分类:
洛谷
, 数据结构与算法 / 模拟
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了