看了这些dalao的方法,我就想问一句:

难道你们用暴力就不行吗???

我们开一个二维数组,输入字符,当我们找到雷时,另一个二维数组将这个位置标记。

后面查找的时候,我们只需要找出与这个点相邻的八个角上之和。

这八个点是(从上到下并从左到右):k[i-1][j-1],k[i-1][j],k[i-1][j+1],k[i][j-1],k[i][j+1],k[i+1][j-1],k[i+1][j],k[i+1][j+1]

如果这个点上的字符是‘#’,就输出‘#’。

每输出完W个,记得换行。

Code:

#include<bits/stdc++.h>//懒人专用文件头

using namespace std;
int h,w,k[55][55];//k这个二维数组用来记录某个点上的字符是否为‘#’
char c[55][55];//定义一个字符的二维数组
int main()
{
    cin>>h>>w;
    for(int i=1;i<=h;i++)
    {
        for(int j=1;j<=w;j++)
        {
            cin>>c[i][j];//输入这个字符
            if(c[i][j]=='#')k[i][j]=1;//如果这个字符是‘#’,标记为1
        }
    }
    for(int i=1;i<=h;i++)
    {
        for(int j=1;j<=w;j++)
        {
            if(c[i][j]=='#')cout<<"#";//若这个点的字符是‘#’,就输出‘#’
            else
            {
                cout<<k[i-1][j-1]+k[i-1][j]+k[i-1][j+1]+k[i][j- 1]+k[i][j+1]+k[i+1][j-1]+k[i+1][j]+k[i+1][j+1];//暴力,把k这个二维数组中和这个点相邻的八个点加起来(我只能说,角连着也算...)
            }
        }
        cout<<"\n";//输出完一行就换行
    }

    return 0;//结束
}

洛谷能通过本神犇蒟蒻的题解!!!