遍历所有左上角#
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 1e3+5;
int n, m, k;
char mapp[maxn][maxn];
int vis[maxn][maxn];
bool f(int i, int j) {
if (mapp[i][j+1] == '.' || mapp[i][j+2] == '.' || mapp[i+1][j] == '.' || mapp[i+1][j+2] == '.' || mapp[i+2][j] == '.' || mapp[i+2][j+1] == '.' || mapp[i+2][j+2] == '.') {
return false;
}
return true;
}
void change(int i, int j) {
vis[i][j+1] = 1;
vis[i][j+2] = 1;
vis[i+1][j] = 1;
vis[i+1][j+2] = 1;
vis[i+2][j] = 1;
vis[i+2][j+1] = 1;
vis[i+2][j+2] = 1;
return ;
}
int main()
{
scanf("%d%d", &n, &m);
memset(vis, 0, sizeof(vis));
for (int i = 0; i < n; i ++) {
scanf("%s", mapp[i]);
}
for (int i = 0; i < n - 2; i ++) {
for (int j = 0; j < m - 2; j ++) {
if (mapp[i][j] == '#') {
vis[i][j] = 1;
if (f(i, j)) change(i, j);
}
}
}
int flag = 1;
for (int i = 0; i < n; i ++) {
for (int j = 0; j < m; j ++) {
if (mapp[i][j] == '#' && vis[i][j] == 0) {
flag = 0;
}
}
}
if (flag) printf("Yes\n");
else printf("No\n");
}

本文介绍了一种遍历二维地图中特定元素(左上角‘#’)的算法,通过检查周围元素的状态来判断是否进行状态改变。算法使用C++实现,通过双重循环遍历地图的每一个可能的左上角位置,并检查当前位置及其周围的七个位置,如果满足条件,则更改这些位置的状态。
1327

被折叠的 条评论
为什么被折叠?



