一个逆序的思路:
能否在给出的矩阵上通过将一个点四周全变为‘.’最终变成全‘.’。
只有80分
#include<bits/stdc++.h>
using namespace std;
int n, m;
char a[1005][1005];
int dx[10] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[10] = {-1, 0, 1, -1, 1, -1, 0, 1};
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> a[i][j];
}
}
for(int i = 2; i < n; i++){
for(int j = 2; j < m; j++){
for(int k = 0; k < 8; k++){
int x = i + dx[k];
int y = j + dy[k];
a[x][y] = '.';
}
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(a[i][j] == '#'){
cout << "NO";
return 0;
}
}
}
cout << "YES";
return 0;
}