打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
2015年NOIP普及组复赛第2题—扫雷游戏

    【问题描述】

扫雷游戏是一款十分经典的单机小游戏。在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。

现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。

注:一个格子的周围格子包括其上、下、左、右、左上、右上、左下、右下八个方向上与之直接相邻的格子。

    【输入格式】

输入文件名为 mine.in。

输入文件第一行是用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数。

接下来 n 行,每行 m 个字符,描述了雷区中的地雷分布情况。字符’*’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。

    【输出格式】

输出文件名为 mine.out。

输出文件包含 n 行,每行 m 个字符,描述整个雷区。用’*’表示地雷格,用周围的地雷个数表示非地雷格。相邻字符之间无分隔符。

  【输入样例 1】

    3 3

    *??

    ???

    ?*?

  【输出样例1】

    *10

    221

    1*1  

  【输入样例 2】

    2 3

    ?*?

    *??

  【输出样例2】

    2*1

    *21

  【数据说明】

    对于 100%的数据,1≤n≤100,1≤m≤100。

    问题分析:

    考察:二维字符数组、暴力枚举

    对二维字符数组的处理操作跟二维整型数组处理方式一样。

    如何表示某个点的八个方向

    方法1:

    例如点(x,y)的上右下左,左上,左下,右下,右上八个方向的表示方法:

    上:(x-1,y)

    右:(x,y+1)

    下:(x+1,y)

    左:(x,y-1)

    左上:(x-1,y+1)

    左下:(x+1,y+1)

    右下:(x+1,y-1)

    右上:(x-1,y-1)

    方法2:

    int dx[8]= {-1,0,1,0,-1,1,1,-1}; //上右下左,左上,左下,右下,右上

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

    例如点(x,y)的上右下左,左上,左下,右下,右上八个方向的表示方法:

    上:(x+dx[0],y+dy[0])

    右:(x+dx[1],y+dy[1])

    下:(x+dx[2],y+dy[2])

    左:(x+dx[3],y+dy[3])

    左上:(x+dx[4],y+dy[4])

    左下:(x+dx[5],y+dy[5])

    右下:(x+dx[6],y+dy[6])

    右上:(x+dx[7],y+dy[7])

    如果同时要遍历八个方向,就可以使用循环来表示:

    for(int i = 0;i < 8;i++){

    int tx = x + dx[i];

    int ty = y + dy[i];

    }

    处理过程:

    1)输入二维字符数组表示地图

    2)循环遍历二维字符数组中的每个字符

    3)判断该字符如果是地雷就输出'*',如果不是地雷就判断八个方向上的字符是否为地雷,是则数量加1。

    注意:二维数组的下标越界问题。

    参考程序:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
深度优先搜索(续)
y=(2x^3+208x^2)/(x-1)^2 单调性等性质
概率论试题加答案
好程序员大数据学习路线分享Scala分支和循环
【Python-CFD】07:数组操作
BFS 是否能 逃离迷宫 始点,终点。之三 常用版
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服