用C语言写一个基于元胞自动机的新冠疫情扩散程序
时间: 2023-06-12 19:06:11 浏览: 115
好的,以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define WIDTH 50
#define HEIGHT 20
int world[HEIGHT][WIDTH] = {0}; // 0表示健康,1表示感染,2表示康复
// 随机初始化病毒
void init_virus() {
srand((unsigned int)time(NULL));
int x = rand() % WIDTH;
int y = rand() % HEIGHT;
world[y][x] = 1;
}
// 计算邻居中感染的数量
int count_infected_neighbors(int x, int y) {
int count = 0;
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
int nx = x + i;
int ny = y + j;
if (nx < 0 || nx >= WIDTH || ny < 0 || ny >= HEIGHT) {
continue;
}
if (world[ny][nx] == 1) {
count++;
}
}
}
return count;
}
// 更新世界状态
void update_world() {
int new_world[HEIGHT][WIDTH] = {0};
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
int count = count_infected_neighbors(x, y);
if (world[y][x] == 0 && count > 0) {
// 健康变为感染
if (rand() % 100 < 20) { // 感染率为20%
new_world[y][x] = 1;
}
} else if (world[y][x] == 1) {
// 感染变为康复
if (rand() % 100 < 10) { // 恢复率为10%
new_world[y][x] = 2;
} else {
new_world[y][x] = 1;
}
} else {
new_world[y][x] = 2;
}
}
}
// 更新世界状态
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
world[y][x] = new_world[y][x];
}
}
}
// 打印世界状态
void print_world() {
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
if (world[y][x] == 0) {
printf(".");
} else if (world[y][x] == 1) {
printf("*");
} else {
printf("O");
}
}
printf("\n");
}
}
int main() {
init_virus();
while (1) {
system("clear"); // 清屏
print_world();
update_world();
usleep(100000); // 休眠100毫秒
}
return 0;
}
```
这段代码实现了一个简单的元胞自动机,模拟了新冠病毒在人群中的扩散过程。程序以一个二维数组 `world` 表示世界状态,数组中的元素表示每个位置的状态,0表示健康,1表示感染,2表示康复。程序随机初始化一个感染点,然后每个时间步更新世界状态,直到所有人都康复或者病毒扩散到全世界。程序中使用了随机数来模拟感染和恢复的过程,可以根据需要修改感染率和恢复率。
阅读全文