题解
流感传染
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; long long n, m, c; // n: 宿舍区的大小, m: 天数, c: 感染人数计数 long long a[999][999]; // 状态矩阵,最大大小999x999 char a1; // 临时变量,用于输入每个房间的状态 int main() { cin >> n; // 输入宿舍区的规模 for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> a1; // 读取每个房间的状态 if (a1 == '#') { a[i][j] = 0; // 空房间 } if (a1 == '@') { a[i][j] = 2; // 第一天的病人 } if (a1 == '.') { a[i][j] = 1; // 健康人 } } } cin >> m; // 输入感染的天数 // 从第二天开始遍历直到第m天 for (int i = 2; i <= m; i++) { // 检查每个房间 for (int j = 1; j <= n; j++) { for (int k = 1; k <= n; k++) { if (a[j][k] == 2) { // 如果当前房间是感染者 // 检查四个方向的邻居 if (a[j-1][k] == 1) { a[j-1][k] = 3; // 上邻居变为标记的健康人 } if (a[j][k+1] == 1) { a[j][k+1] = 3; // 右邻居变为标记的健康人 } if (a[j+1][k] == 1) { a[j+1][k] = 3; // 下邻居变为标记的健康人 } if (a[j][k-1] == 1) { a[j][k-1] = 3; // 左邻居变为标记的健康人 } } } } // 更新状态,将所有被标记的健康人转为感染者 for (int j = 1; j <= n; j++) { for (int k = 1; k <= n; k++) { if (a[j][k] == 3) { a[j][k] = 2; // 更新成感染者 } } } } // 统计感染人数 for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (a[i][j] == 2) { c++; // 感染人数加1 } } } cout << c; // 输出总感染人数 return 0; }
- 1