P2670 【扫雷游戏】

题面哦~~

lalala~~~

这题数据并不大,最大不过100*100,所以果断穷举

其实本来我是想边读边做的,但读入是个问题。

主要思路呢,就是读完之后穷举一边,只要是炸弹,就把周围一圈8个加一遍

AC代码:

 1 #include<set>
 2 #include<map>
 3 #include<list>
 4 #include<queue>
 5 #include<stack>
 6 #include<string>
 7 #include<cmath>
 8 #include<ctime>
 9 #include<vector>
10 #include<bitset>
11 #include<memory>
12 #include<utility>
13 #include<cstdio>
14 #include<sstream>
15 #include<iostream>
16 #include<cstdlib>
17 #include<cstring>
18 #include<algorithm>//忒多的头文件
19 using namespace std;
20 int n,m;
21 int mm[105][105];
22 char a[105][105];
23 int main(){
24     cin>>n>>m;
25     for(int i=1;i<=n;i++){
26         scanf("%s",&a[i]);//我之前想的读入好复杂,,结果。。。
27     }
28     for(int i=1;i<=n;i++){//穷举
29         for(int j=0;j<m;j++){
30             if(a[i][j]=='*'){//是炸弹的情况
31                 mm[i][j]=-100000000;//其实一个点最多就加8下
32                 mm[i-1][j-1]++;//不停加,8个
33                 mm[i-1][j]++;
34                 mm[i-1][j+1]++;
35                 mm[i][j-1]++;
36                 mm[i][j+1]++;
37                 mm[i+1][j-1]++;
38                 mm[i+1][j]++;
39                 mm[i+1][j+1]++;
40             }
41         }
42     }
43     for(int i=1;i<=n;i++){
44         for(int j=0;j<m;j++){
45             if(mm[i][j]<0){//是地雷就输出*
46                 cout<<"*";
47             }
48             else{
49                 cout<<mm[i][j];//不是就输出周围个数
50             }
51         }
52         cout<<endl;
53     }
54     return 0;
55 }

其实最后输出的时候可以用一句概括为一个三目表达式:cout<<(mm[i][j]<0?'*':m[i][j]),理解起来应该不困难

最后,祝大家AV!!!AK!!!

原文地址:https://www.cnblogs.com/hahaha2124652975/p/11123084.html