1.扫雷
#include <bits/stdc++.h>
using namespace std;
const int N = 150;
int mp[N][N], ans[N][N];//二维数组
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n , m ; cin >> n >> m ;
for(int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < m ; j++)
{
cin >> mp[i][j];//输入数据
}
}
for (int i = 0;i < n; ++i)
{
for(int j = 0;j < m; ++j)
{
if (mp[i][j] == 1)
{
ans[i][j] = 9;
continue;
}
//扫描数组
for (int _i = max(0,i - 1); _i <= min(n,i + 1); ++ _i)
{
for(int _j = max(0,j - 1); _j <= min(m,j + 1); ++ _j)
{
if (mp[_i][_j])ans[i][j] ++ ;
}
}
}
}
//输出
for(int i = 0 ; i < n ; ++ i)
{
for (int j = 0 ; j < m ; ++j)
{
cout << ans[i][j] << " ";
}
cout << "\n";
}
return 0;
}
2.灌溉
#include <bits/stdc++.h>
using namespace std;
const int N = 150 ;
bool a[N][N] , b[N][N];
int main()
{
int n ,m ;cin >> n >> m;
int t ; cin >> t ;
for (int i = 1;i <= t; ++ i)
{
int r , c ; cin >> r >> c ;
a[r][c] = 1;
}
int k ; cin >> k ;
//扫描并更新数组
while (k -- )
{
for (int i = 1 ; i <= n ; ++ i)
for (int j = 1 ; j <= m ; ++j )
{
if(a[i][j]) b[i][j] = b[i - 1][j] = b[i + 1][j] = b[i][j - 1] = b[i][j + 1] = 1;
}
//将b复制给a
for (int i = 1;i <= n; ++ i)
for (int j = 1;j <= m; ++ j) a[i][j] = b[i][j];
}
//输出
int ans = 0;
for(int i = 1 ; i <= n ; ++ i)
for(int j = 1;j <= m; ++ j)
if (a[i][j]) ans ++;
cout << ans << "\n";
return 0;
}