以上c++代码实现
时间: 2024-02-29 21:51:06 浏览: 103
好的,以下是C++代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
const int dx[] = {-1, 0, 1, 0}; // 上右下左
const int dy[] = {0, 1, 0, -1};
int main() {
int m, n;
cin >> m >> n;
vector<vector<int>> matrix(m, vector<int>(n));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}
// 将所有的1周围的0同化成1
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 1) {
for (int k = 0; k < 4; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
if (nx >= 0 && nx < m && ny >= 0 && ny < n && matrix[nx][ny] == 0) {
matrix[nx][ny] = -1; // 标记为“已同化”
}
}
} else if (matrix[i][j] == 2) {
matrix[i][j] = -2; // 标记为“免疫”
} else {
matrix[i][j] = 0; // 标记为“未同化”
}
}
}
matrix[0][0] = 1; // 将矩阵中的[0,0]元素修改为1
// 模拟同化过程
bool flag = true;
while (flag) {
flag = false;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0 || matrix[i][j] == 2) {
int cnt = 0;
for (int k = 0; k < 4; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
if (nx >= 0 && nx < m && ny >= 0 && ny < n && matrix[nx][ny] == 1) {
cnt++;
}
}
if (cnt > 0) {
matrix[i][j] = -1; // 标记为“已同化”
flag = true;
}
}
}
}
// 将所有被标记为“已同化”的元素同化成1
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == -1) {
matrix[i][j] = 1;
}
}
}
}
// 统计矩阵中值为0或2的元素个数
int ans = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0 || matrix[i][j] == 2) {
ans++;
}
}
}
cout << ans << endl;
return 0;
}
```
阅读全文