#include<iostream>
#include<vector>//使用原因vector二维数组传递好实现且安全,同时初始化方便
using namespace std;
int See(int i,int j,const vector<vector<char>> &a)//该函数扫描周围八格有无雷,这里是const引用传递
{ int count=0;//建立一个计数器
for(int k=i-1;k<=i+1;k++)
{
for(int l=j-1;l<=j+1;l++)//无需跳过本格,主函数中有判定,一定是无雷所以不影响
{
if(a[k][l]=='*')count++;
}
}
return count;
}
int main()
{
int n,m;cin>>n>>m;
vector<vector<char>> a(n+2,vector<char>(m+2,'.'));//+2是为了让实际储存大一圈避免再写溢出判定
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='*')cout<<'*';
else cout<<See(i,j,a);//这里if简单判定是否是雷
}
cout<<endl;
}
return 0;
}
为了实现模块化(本人喜欢模块化),必须考虑二维数组传递问题,所以想到了vector
vector有三种二维数组传递方式,分别是值传递,引用传递,和const引用传递(只读)
这里用的const引用传递不会创建副本,也避免数组被改变(提高安全性)

京公网安备 11010502036488号