欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

P2670 【扫雷游戏】

程序员文章站 2022-06-09 13:04:24
题面哦~~ lalala~~~ 这题数据并不大,最大不过100*100,所以果断穷举 其实本来我是想边读边做的,但读入是个问题。 主要思路呢,就是读完之后穷举一边,只要是炸弹,就把周围一圈8个加一遍 AC代码: 其实最后输出的时候可以用一句概括为一个三目表达式:cout<<(mm[i][j]<0?' ......

题面哦~~

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!!!