生命游戏 C++

生命游戏【C/C++】 生命游戏 简介: 康威生命游戏: 康威生命游戏(Game of Life),剑桥大学约翰·何顿·康威设计的计算机程序。[1]美国趣味数学大师马丁·加德纳(Martin Gardner,1914-2010)通过《科学美国人》杂志,将康威的生命游戏介绍给学术界之外的广大渎者,一时吸引了各行各业一大批人的兴趣,这时细胞自动机课题才吸引了科学家的注意。[1] 中文名:康威生命游戏 外文名:Conway life game 提出者约翰·何顿·康威 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 阅读详情

根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。

给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:

  1. 如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
  2. 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
  3. 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
  4. 如果死细胞周围正好有三个活细胞,则该位置死细胞复活;

根据当前状态,写一个函数来计算面板上所有细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。

 

示例:

输入: 
[
  [0,1,0],
  [0,0,1],
  [1,1,1],
  [0,0,0]
]
输出:
[
  [0,0,0],
  [1,0,1],
  [0,1,1],
  [0,1,0]
]

 

进阶:

  • 你可以使用原地算法解决本题吗?请注意,面板上所有格子需要同时被更新:你不能先更新某些格子,然后使用它们的更新后的值再更新其他格子。
  • 本题中,我们使用二维数组来表示面板。原则上,面板是无限的,但当活细胞侵占了面板边界时会造成问题。你将如何解决这些问题?

分析:

    暴力一个一个遍历

    暂时没想到更好的解法,或许可以怎么结合扫雷游戏的算法???

class Solution {
private:
    vector<vector<int>> result;
    int life(vector<vector<int>>& board, int row, int col);
    int min(int a, int b){return a<b?a:b;}
    int max(int a, int b){return a>b?a:b;}
public:
    void gameOfLife(vector<vector<int>>& board) {
        // 暴力的一个一个更改
        for(int i=0; i<board.size(); i++){
            vector<int> row;
            for(int j=0; j<board[i].size(); j++){
                row.push_back(life(board, i, j));
            }
            result.push_back(row);
        }
        board = result;
    }
};
// 判断Board[row][col]的值
int Solution::life(vector<vector<int>>& board, int row, int col){
    int count0 = 0;
    int count1 = 0;
    int curr = 0;
    // 遍历计数
    for(int i=max(row-1, 0); i<=min(row+1, board.size()-1); i++){
        for(int j=max(col-1, 0); j<=min(col+1, board[row].size()-1); j++){
            board[i][j] == 0?count0++:count1++;
        }
    }
    // 确定当前状态
    if(board[row][col] == 1){
        count1 --;
        // 活细胞变死
        if(count1 < 2 or count1 > 3){
            curr = 0;
        }else{
            curr = 1;
        }
    }else{
        count0 --;
        if(count1 == 3){
            curr = 1;
        }else{
            curr = 0;
        }
    }
    return curr;
}

 

C++小游戏实战——生命游戏 简介 康威生命游戏(英语:Conway’s Game of Life),又称康威生命棋,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。 规则 生命游戏中,对于任意细胞,规则如下: 每个细胞有两种状态 - 存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动 当前细胞为存活状态时,当周围的存活细胞低于2个时(不包含2个),该细胞变成死亡状态。(模拟生命数量稀少) 当前细胞为存活状态时,当周围有2个或3个存活细胞时,该细胞保持原样。 当前细胞为存活状态时,当周围有超过3个存活细胞时,该细胞变成 阅读详情

相关推荐

C++练习项目:康威生命游戏的实现

使用C++标准库实现纯终端康威生命游戏。

小谷的日常随笔集 2542

蓝桥杯------2017 Java B组 国赛:第二题 生命游戏

题目描述: 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。 这个游戏在一个无限大的2D网格上进行。 初始时,每个小方格中居住着一个活着或死了的细胞。 下一时刻每个细胞的状态都由它周围八个格子的细胞状态决定。 具体来说: 1. 当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态。(模拟生命数量稀少) 2. 当前细胞为存活状态时,当...

八面玲珑 915

C++ 实现“生命游戏“

生命游戏

C_User1024的博客 1149

上海市计算机学会竞赛平台2020年4月月赛丙组永恒的生命游戏

他的离去是人类文明的损失。该自动机由一个网格组成,每个方格代表一个细胞,细胞有两种状态:生(黑色表示)或死(白色表示)。利用这些简单的规则,生命游戏将从一个时刻迭代到下一个时刻,呈现不同的演化形态。第一种是稳定状态,细胞自动机从诞生起,布局稳定,没有任何变化。给定一个规模为 n×mn×m 的细胞自动机,请判定它是否处于稳定状态。第二种是振荡状态,细胞自动机反复在几种状态间振荡变化,如下图所示。细胞自动机还有更多有趣的状态,比如繁衍或者移动,此处就不展开了。第三种是消亡状态,细胞自动机逐渐萎缩,如下图所示。

a121677_的博客 557

C/C++实现简单生命游戏(Game Of Life)

文章目录点子-Game of Life实现1. 游戏框架-静止图案2. 动态图案-按规则繁衍死亡 继main函数内部一把梭后,我们进行了模块化改造,但是这样管理游戏数据还是很不好的。加上数组,我们就有能力实现更有意思的游戏,游戏中的一些写法也会改变。 对了,虽然大体上是C实现游戏,但是有的地方写法可能是C++的,建议用.cpp格式运行。我也懒得区分了。 点子-Game of Life 生命游戏是...

memcpy0的博客 7618

上海计算机学会2020年4月月赛C++丙组T2永恒的生命游戏

该自动机由一个网格组成,每个方格代表一个细胞,细胞有两种状态:生(黑色表示)或死(白色表示)。利用这些简单的规则,生命游戏将从一个时刻迭代到下一个时刻,呈现不同的演化形态。第一种是稳定状态,细胞自动机从诞生起,布局稳定,没有任何变化。第二种是振荡状态,细胞自动机反复在几种状态间振荡变化,如下图所示。细胞自动机还有更多有趣的状态,比如繁衍或者移动,此处就不展开了。给定一个规模为 n×m 的细胞自动机,请判定它是否处于稳定状态。第三种是消亡状态,细胞自动机逐渐萎缩,如下图所示。若细胞自动机处于稳定状态,输出。

长春高老师编程 632

生命游戏

lc 289. 生命游戏 Description 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律: 如果活...

qq_27634079的博客 407

在C++中实现生命游戏 (Game of Life) ,并 遵循一些限制 ·生命游戏的规则 一个无限的二维正交方格单元格网格

在C++中实现生命游戏 (Game of Life) ,并 遵循一些限制。 ·生命游戏的规则 一个无限的二维正交方格单元格网格。 每个单元格处于两种可能的状态之一: 存活 或死亡。 每个单元格与其八个邻居进行交互:存活的 单元格如果周围少于两个存活的邻居,则死 存活的单元格如果周围有两个或三个存活的 邻居,则继续存活到下一代。 存活的单元格如果周围有超过三个存活的邻 居,则死亡。 死亡的单元格如果周围恰好有三个存活的邻 居,则在下一代变为存活状态 步骤 第一个版本 a.可以设置网格大小。 b.模拟运行,直到用户触发停止信号。 c.需要以下函数 i.run0: 执行一代。 ii.display0:显示当前状态。 iii.init0: 初始化网格 第二个版本 (如果您感觉自信,可以首先尝 a.定义Automaton类来模拟游戏。 b.可以暂停和恢复模拟。 第三个版本a.定义Cell类 i.每个单元格负责计算下一代的步骤。 ii.单元格显示其状态 第四个版本 a.可以将当前代保存和加载到文件中 b.单元格可以检测一些模式并通知用户 第五个版本 a.用户可以在运行时更改单元格的状态 b.可以撤

生命游戏C++版

生命游戏简介,编程过程(C++),附源代码

2202_76049826的博客 2232

生命游戏 细胞自动机 源代码

生命游戏(细胞自动机)。包含源代码,下载后请自行编译。

windows10 + wsl2安装docker

一、安装wsl https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 1.1以管理员身份运行powershell 1.2执行如下命令 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 1.3重启电脑 1.4 重启电脑后,如果需要安装wsl2, 则安装官方文档继续后续操作,因我...

happytree001的博客 1568

生命细胞游戏的C++实现

  生命游戏   (游戏作品) 生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。它最初于1970年10月在《科学美国人》杂志中马丁·葛登能(Martin Gardner,1914年11月21日-2010年5月22日。又译:马丁·加德纳)的“数学游戏”专栏出现。 中文名 生命游戏 原版名称 Game of Life 其他名称 生命棋 制作人 约翰·何顿·康威...

咚咚怪的博客 3832

从零开始掌握Python机器学习:七步教程 基础篇

前言 「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。 第一步:基本 Python 技能 如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。 首先,你需要安装 Python。因为我们后...

hcgx2018的博客 1613

生命游戏:C++实现与功能设计说明

生命游戏是一款富有挑战性和趣味性的游戏,它可以激发我们对数学、计算机科学和生命哲学的兴趣。

howard2005的专栏 5448

process插件_利用SPSS 插件MLmed检验多水平中介的调节模型

本文介绍一个SPSS插件,用于检验多水平中介的调节,及该方法与Mplus的比较。1 Mlmed 简介及安装Mlmed 简介: Mlmed 由Rockwood 2017年开发,基于SPSS插件计算Multilevel moderated mediation. 可以提供multilevel mediation Monte Carlo 置信区间比如(模拟20000次),以及多水平调节的...

weixin_39976081的博客 5770

KNX智能家居工程设计应用

KNX,是一个起源于欧洲的总线标准,主要应用于家居和楼宇中,对末端电气设备进行总线式的控制,比如照明、空调、地暖、电动窗帘和遮阳设备等等。根据2017年英国著名咨询公司BSRIA的数据报告显示,在中国的智能家居和灯光控制市场,KNX产品的市场份额为各类产品中排名第一,占据了42%的市场份额,远远领先于其他的标准协议。设备中一个继电器表示一路输出,某些功能可能需要用到多个输出,比如1个窗帘AC输出需要占用两路继电器输出,一个继电器用于控制正转,一个用于控制反转,而普通开关输出则需要占用一路继电器输出即可。

hhhh5555666的博客 934

“生命游戏”c++源代码

#include<iostream> #include<time.h> using namespace std; #define X 20 //地图高度 #define Y 30 //地图宽度 #define LIMIT 0.3 void delay(int ms) { clock_t start = clock(); while (clock() - start &l...

Blaze_Xu的博客 2619

数据分析:蛋白质组的GO term的富集分析详解

在获取差异表达蛋白质的数据之后,依据蛋白质与基因的对应映射关系,开展GO(Gene Ontology)term的富集分析。通过这一分析流程,能够精准地识别出不同实验组中过表达基因所关联的显著富集的GO term通路。这些富集的GO term通路为后续的生物学研究提供了关键线索,有助于深入探究基因功能、揭示潜在的生物学机制,从而推动生物学发现的进程。

专注生信领域 1367

C++实战:实现生命游戏

在C++中实现康威生命游戏的实战项目通过设计`Life`类及其成员函数,将数学理论转化为实际代码。该项目涵盖了从初始化、打印到更新游戏状态的关键环节,并通过计算邻居数量的方法遵循生命游戏规则进行迭代。此外,项目还包括了辅助工具函数以增强用户体验,如输出游戏说明和处理用户交互。主程序实现了整个生命游戏的流程控制,允许用户观察不同初始布局下的演化过程。此实现不仅展示了如何构造元胞自动机模型,也通过实践帮助学习者深入理解简单规则如何产生复杂行为这一深刻概念。

howard2005的专栏 3210

(王道考研计算机网络)第三章数据链路层-第一节:数据链路层功能概述

文章目录一:本章概述二:数据链路层基本概念三:数据链路层功能概述(1)为网络层提供服务(2)链路管理(3)组帧(4)流量控制(5)差错控制 本章是计算机网络中入门较难的一章,如果没有接触过相关内容,可能会止步于一些晦涩难懂的术语。本节内容希望大家可以用心看一看,对于大家入门是很有帮助的 一:本章概述 数据链路层位于物理层之上,主要作用就是提高物理层传输比特流的能力,使物理层可能出现差错的连接转变为逻辑上无差错的数据链路,同时向网络层提供服务。本章学习的主要就是数据链路层的功能和应用 数据链路层功能 封

快乐江湖的博客 2469

android 14.0 去掉usb授权提示框 默认给予权限

在14.0的系统rom产品开发中,在进行iot关于插入usb设备的开发过程中,在插入usb设备时会弹出usb授权提示框,也带来一些不便, 这个需要默认授予USB权限,插拔usb都不弹出usb弹窗所以这要从usb授权相关管理页默认给与usb权限,接下来分析下 相关的实现功能流程

安卓兼职framework和app工程师的博客 2261

【数学&编程】C++实现康威生命游戏

数学与编程的结合——C++实现康威生命游戏(代码原创)

qq_25426559的博客 2511

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++ 实现生命游戏 Live Game

/ 从a状态生成到b中。// 清空上一次的状态。cout

weixin_53064820的博客 960

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++生命游戏

再来分享一个C++生命游戏的代码吧!注:刚开始时细胞很少,但过一会细胞就变多了。

洛谷小蒟蒻 394

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

linux生命游戏实现,生命游戏C++实现

最近孩子在学C++,遇到不会的来问,c++已经很多年没有碰过了,很多基本语法都生疏了,有很多问题答不上来,或者干脆回答错误。只好抽时间重头来一遍。今天孩子编“生命游戏”,跟着编了一遍,放在这里,打个卡。这个游戏很简单,在二维空间中生活着很多元胞,每个元胞周围有八个位置,如果这八个位置中只有一个或没有元胞,这个元胞会因孤独而死亡,如果有三个以上的邻居,就会因为拥挤而死亡。如果一个空位置周围刚好有三个...

weixin_39522312的博客 183
上一篇: 四数相加 II C++
下一篇: leetcode  最长连续序列 C++
rdc01234
博客等级 码龄9年 10粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值