zoukankan      html  css  js  c++  java
  • Vijos P1975 扫雷游戏【谜题】

    描述

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

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

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

    格式

    输入格式

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

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

    输出格式

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

    样例1

    样例输入1

    3 3
    *??
    ???
    ?*?
    

    样例输出1

    *10
    221
    1*1
    

    样例2

    样例输入2

    2 3
    ?*?
    *??
    

    样例输出2

    2*1
    *21
    

    限制

    对于所有的数据,1≤n≤100, 1≤m≤1001le nle 100,~1le mle 1001n100, 1m100

    来源

    NOIP 2015 普及组 第二题
    数据由AHdoc生成


    问题链接 Vijos P1975 扫雷游戏

    问题分析

    扫雷游戏是人们熟知的一个计算机游戏,通过这个程序,可以了解其局部的计算是如何实现的。

    这是一个简单的计算问题,对于一个位置,直接计算其周围的地雷数量即可。

    定义二维数组用于存储扫雷游戏的棋盘时,周围多出一圈,可以省去数组下标的越界判定。

    程序说明

    函数memset()用于给大量的存储空间设置初始值是方便快捷的。

    数组around[]存储周围元素的相对下标,使得无序变有序,可以用循环来处理。

    这个是程序是之前写的,直接拿过来用就AC了,参见参考链接。

    题记

    游戏无所不在。


    参考链接CCF NOI1054 扫雷游戏


    AC的C++程序如下:

        #include <stdio.h>  
        #include <string.h>  
          
        struct _around {  
            int drow;  
            int dcol;  
        } around[] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}};  
        #define AN 8  
          
        #define N 100  
        char a[N+2][N+2];  
          
        int main(void)  
        {  
            int n, m, i, j, k;  
          
            memset(a, 0, sizeof(a));  
          
            scanf("%d%d", &n, &m);  
            for(i=1; i<=n; i++)  
                scanf("%s", a[i]+1);  
          
            for(i=1; i<=n; i++) {  
                for(j=1; j<=m; j++) {  
                    int count = 0;  
                    if(a[i][j] == '*')  
                        printf("%c", a[i][j]);  
                    else {  
                        for(k=0; k<AN; k++)  
                            if(a[i + around[k].drow][j + around[k].dcol] == '*')  
                                count++;  
                        printf("%d", count);  
                    }  
                }  
                printf("
    ");  
            }  
            return 0;  
        }  






  • 相关阅读:
    flask 源码专题(七):threading.local和高级
    flask 源码专题(六):session处理机制
    flask 源码专题(五):SqlAlchemy 中操作数据库时session和scoped_session的区别
    flask 源码专题(四):wtforms Form实例化流程以及csrf验证
    flask 源码专题(三):请求上下文和应用上下文入栈与出栈
    python 追踪函数调用
    flask 源码专题(一):app.run()的背后
    flask 源码专题(二):请求上下文与全文上下文
    边框间距 | border-spacing (Miscellaneous Level 2)
    边框样式属性 | border-top-style (Backgrounds & Borders)
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563818.html
Copyright © 2011-2022 走看看