zoukankan      html  css  js  c++  java
  • Minesweeper

    题目描述

    Minesweeper ave you ever played Minesweeper? This cute little game comes with a certain operating system whose name we can't remember. The goal of the game is to find where all the mines are located within a M x N field. The game shows a number in a square which tells you how many mines there are adjacent to that square. Each square has at most eight adjacent squares. The 4 x 4 field on the left contains two mines, each represented by a ``*'' character. If we represent the same field by the hint numbers described above, we end up with the field on the right: *... .... .*.. .... *100 2210 1*10 1110
    输入
    The input will consist of an arbitrary number of fields. The first line of each field contains two integers n and m ( 0 < n, m$ le$100) which stand for the number of lines and columns of the field, respectively. Each of the next n lines contains exactly m characters, representing the field. Safe squares are denoted by ``.'' and mine squares by ``*,'' both without the quotes. The first field line where n = m = 0 represents the end of input and should not be processed.
    输出
    For each field, print the message Field #x: on a line alone, where x stands for the number of the field starting from 1. The next n lines should contain the field with the ``.'' characters replaced by the number of mines adjacent to that square. There must be an empty line between field outputs.
    样例输入
    4 4
    *...
    ....
    .*..
    ....
    3 5
    **...
    .....
    .*...
    0 0
    
    样例输出
    Field #1:
    *100
    2210
    1*10
    1110
    
    Field #2:
    **100
    33200
    1*100
    
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    int dir[8][2] = {{-1,0},{0,1},{1,0},{0,-1},{-1,-1},{-1,1},{1,1},{1,-1}};
    
    int main()
    {
        int num = 1;
        int m,n;
        cin>>m>>n;
        while(m != 0 && n != 0)
        {
            char data[m][n];
            int a[m][n];
            for(int i = 0; i < m; i++)
                for(int j = 0; j < n; j++)
                    cin>>data[i][j];
            memset(a,0,sizeof(a));
            int m1 = m-1;
            int n1 = n-1;
            while(m1 != 0 || n1 != 0)
            {
                if(data[m1][n1] != '*')
                {
                    for(int i = 0; i<8; i++)
                    {
                        int x = m1+dir[i][0];
                        int y = n1+dir[i][1];
                        if( x > -1 &&  y > -1 && y < n && x < m)
                        {
                            if(data[x][y] == '*' && data[m1][n1] == '.')
                                a[m1][n1]++;
                        }
                    }
                }
                if(n1-1 != -1)
                    n1--;
                else
                {
                    n1 = n-1;
                    m1--;
                }
    
            }
            cout<<"Field #"<<num<<":"<<endl;
            for(int i = 0; i < m; i++)
            {
                for(int j = 0; j < n; j++)
                {
                    if(data[i][j] == '*')
                        cout<<"*";
                    else
                        cout<<a[i][j];
                }
                cout<<endl;
            }
            cout<<endl;
            num++;
            cin>>m>>n;
        }
        return 0;
    }
    
  • 相关阅读:
    Mybatis缓存理解
    Spring Batch中job的启动,停止,放弃操作
    spring中xml配置方式和注解annoation方式(包括@autowired和@resource)的区别
    fastjson使用TypeReference示例
    RabbitMQ基础组件和SpringBoot整合RabbitMQ简单示例
    RabbitMQ中各种消息类型如何处理?
    消息队列RabbitMQ基础知识详解
    RabbitMQ的消息确认机制
    rsync+inotify-tools
    Linux Rsync
  • 原文地址:https://www.cnblogs.com/NikkiNikita/p/9450754.html
Copyright © 2011-2022 走看看