题解 AT3595 【Minesweeper】
Mr_WA
2019-05-29 13:18:50
看了这些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;//结束
}
# 洛谷能通过本~~神犇~~蒟蒻的题解!!!