#include<iostream>
#include<cstring>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int a[30][30];
int b[30][30];
memset(b, false, sizeof(b));
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >>a[i][j];
for (int i = 0; i < m; i++)
for (int j = 1; j < n - 1; j++)
if (a[i][j - 1] == a[i][j] && a[i][j] == a[i][j + 1])
b[i][j - 1] = b[i][j] = b[i][j + 1] = true;
for (int j = 0; j < n; j++)
for (int i = 1; i < m - 1; i++)
if (a[i-1][j ] == a[i][j] && a[i][j] == a[i+1][j])
b[i-1][j ] = b[i][j] = b[i+1][j] = true;
for (int i = 0; i < m; i++)
for (int j = 0; j < n ; j++)
if (b[i][j] == true)
a[i][j] = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n ; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
思路:先遍历行,再遍历列,用数组存储需要消除的位置,注意,一定要行列全部遍历完了标记好,最后再消除,因为存在行列共用某位置的情况。