用python解决该题目【题目描述】 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。 【输入】 第一行一个数字n,n不超过100,表示有n*n的宿舍房间。 接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。 接下来的一行是一个整数m,m不超过100。 【输出】 输出第m天,得流感的人数。 【输入样例】 5 …# .#.@. .#@… #… … 4 【输出样例】 16
时间: 2024-04-10 09:27:52 浏览: 8
你可以使用广度优先搜索(BFS)来解决这个问题。首先,将初始状态下得流感的人的位置加入队列。然后,进行m次循环,每次循环都进行以下操作:
1. 从队列中取出一个人的位置。
2. 将这个人的位置的邻居中健康的人(表示为'.')改为得流感的人(表示为'@'),并将新得流感的人的位置加入队列。
最后,统计得流感的人的数量即为答案。
下面是用Python实现的代码:
```python
from collections import deque
def count_infected_people(matrix, m):
n = len(matrix)
dx = [-1, 1, 0, 0] # 上下左右四个方向
dy = [0, 0, -1, 1]
queue = deque()
infected_count = 0
# 初始化,将初始状态下得流感的人的位置加入队列
for i in range(n):
for j in range(n):
if matrix[i][j] == '@':
queue.append((i, j))
infected_count += 1
# 进行m次循环
for _ in range(m):
next_queue = deque()
# 从队列中取出一个人的位置
while queue:
x, y = queue.popleft()
# 将这个人的位置的邻居中健康的人改为得流感的人,并将新得流感的人的位置加入队列
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < n and 0 <= ny < n and matrix[nx][ny] == '.':
matrix[nx][ny] = '@'
next_queue.append((nx, ny))
infected_count += 1
queue = next_queue
return infected_count
n = int(input())
matrix = []
for _ in range(n):
row = list(input())
matrix.append(row)
m = int(input())
result = count_infected_people(matrix, m)
print(result)
```
希望对你有帮助!如果还有其他问题,请随时提问。