题解 AT3595 【Minesweeper】

Mr_WA

2019-05-29 13:18:50

Solution

看了这些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;//结束 } # 洛谷能通过本~~神犇~~蒟蒻的题解!!!