生命游戏

本文介绍了生命游戏的规则,并详细说明了如何在一个平面上使用细胞自动机模型进行模拟。要求包括实现至少2020大小的平面,并使用MPI进行并行计算。顺序代码和并行代码的实现思路被提出,数据划分方法以p=4为例,子进程处理内部数据并与主进程通信。此外,推荐了一个在线体验生命游戏的网站。
摘要由CSDN通过智能技术生成

背景

生命游戏中,对于任意细胞,规则如下:

  1. 每个细胞有两种状态-存活或死亡,每个细胞与以自身为中心的周围八个细胞产生互动。
  2. 当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少)
  3. 当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样。
  4. 当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态。(模拟生命数量过多)
  5. 当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态。 (模拟繁殖)

本实验中,需要在一个平面上使用细胞自动机模型实现生命游戏模拟。可以把最初的细胞结构定义为种子,当所有在种子中的细胞同时被以上规则处理后, 可以得到第一代细胞图。按规则继续处理当前的细胞图,可以得到下一代的细胞图,周而复始。

要求

  1. 设定平面大小至少为2020(WidthHeight),具体数值可以自行设定。
  2. 实现顺序代码后,使用MPI实现一个简单的并行情况代码。

代码

顺序代码

#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
  
#define N 42  
#define M 72  
//平面大小40×70,周围一圈作为边界
char cell = '@';  //细胞形状
  
void init(char cells[N][M]);  
void show(char cells[N][M]);  
void evolve(char cells[N][M]);  
int around(char cells[N][M], int x, int y);  
  
int main(int argc, char *argv[])  
{
     
    if(argc != 2)  
    {
     //用户输入代数
        printf("Usage:%s number\n", argv[0]);   
        return 1;  
    }  
      
    char cells[N][M];  
    int i = 0, G=atoi(argv[1]);  
    init(cells);   
    show(cells);  
    while(i++ < G) {
     
        sleep(1);  
        evolve(cells);  
        show(cells);  
        printf("\ngeneration %d\n",i);  
    }  
  
    return 0;  
}  
void init(char cells[N][M])  
{
     //随机初始化培养皿
    int i,j;  
    srand(time(0));  
  
    for(i=0;i<N;i++)  
        for(j=0;j<M;j++)  
            if(rand()%2 || 0==i || 0==j   
                || N-1 == i || M-1 == j)  
                cells[i][j]=' ';  
            else  
                cells[i][j]=cell;  
}  
  
void show(char cells[N][M])  
{
     
    int i,j;  
  
    system("clear");  
    for(i=0;i<N;i++) {
   </
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值