假设有一个大小为m*n的板子,有m行,n列个细胞。每个细胞有一个初始的状态,死亡或者存活。每个细胞和它的邻居(垂直,水平以及对角线)。互动规则如下:
1.当前细胞存活时,周围低于2个存活细胞时,该细胞死亡。(模拟生物数量过少,导致死亡)
2.当前细胞存活时,周围有2个~3个存活细胞时,该细胞保持原状态。
3.当前细胞存活时,周围有3个以上存活细胞时,该细胞死亡。(模拟生物数量过大导致死亡)
4.当前细胞死亡时,周围存在3个存活细胞时,该细胞变成存活状态。(生活繁殖)
写一个函数,根据当前的状态计算下一个状态。
进阶:
1,就地解决问题?记住,该空间需要同时更新。不能首先更新一部分,然后再用这些新的状态去更新其他的细胞。
2,在这个问题吗,我们使用了二维数组。原则上空间无限大。这些变化影响到边界时,如何处理?

详见:https://leetcode.com/problems/game-of-life/description/

class Solution {
public:
void gameOfLife(vector<vector<int>>& board) {
int rows = board.size();
int cols = board[0].size();
for(int i = 0; i < rows; ++i){
for(int j = 0; j < cols; ++j){
int neighbors = getNeighbors(board,i,j);
//如果当前细胞是活的
if((board[i][j] & 1) == 1){
//如果活细胞周围邻居有两道三个为活细胞,则下一代继续存活
if(neighbors == 2 || neighbors == 3){
board[i][j] = 3;
}
//如果是01,则在更新时,死掉
//如果小于2个或者大于3个,都是导致死亡
}else{
//如果当前细胞是死的,其相邻有三个或者的邻居。则其变成一个活细胞
if(neighbors == 3){
board[i][j] = 2;
}
}
}
}
for(int i = 0; i < rows; ++i){
for(int j = 0; j < cols;++j){
board[i][j] = board[i][j] >> 1;
}
}
}
//统计为1的邻居个数
int getNeighbors(vector<vector<int> > &board,int r,int c){
int rows = board.size();
int cols = board[0].size();
int res = 0;
for(int i = std::max(0,r-1); i <= std::min(rows-1,r+1);++i){
for(int j = std::max(0,c-1); j <= std::min(cols-1,c+1); ++j){
res += board[i][j]&1;
}
}
res -= board[r][c]&1;
return res;
}
};

参考:https://blog.csdn.net/sjwl2012/article/details/54344670

https://www.cnblogs.com/grandyang/p/4854466.html

289 Game of Life 生命的游戏的更多相关文章

  1. [LeetCode] 289. Game of Life 生命游戏

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  2. 289. Game of Life -- In-place计算游戏的下一个状态

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  3. 第1部分: 游戏引擎介绍, 渲染和构造3D世界

    原文作者:Jake Simpson译者: 向海Email:GameWorldChina@myway.com ---------------------------------------------- ...

  4. 转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架

    高层游戏引擎——基于OGRE所实现的高层游戏引擎框架 这是意念自己的毕业论文,在一个具体的实践之中,意念主要负责的是物件和GUI之外的其他游戏系统.意念才学疏陋,望众位前辈不吝赐教.由于代码质量不高. ...

  5. AI:从游戏引擎--到AI

    原文链接:http://blog.csdn.net/left_la/article/details/6358911#t9 这是我在Gameres上看到的一篇文章,文章很长,全文分为11个部分,看后感觉 ...

  6. 寓教于乐!一款游戏让你成为 Vim 高手!

    我们都知道,Vim 是 Linux 下一种非常重要的文本编辑器,我们可以用它来看代码.改代码,很多高手直接将 Vim 打造成一款强大的 IDE 用来写代码. 但是,对于新手而言,Vim 相对于其它编辑 ...

  7. zz Must read

    http://www.opengpu.org/forum.php?mod=viewthread&tid=965&extra=page%3D1 游戏引擎剖析(Game Engine An ...

  8. GDC2016【For Honor-荣耀战魂】的次世代动画技术

    生成自然丰富,反应灵敏的动作的“Motion Matching”是什么?         Ubisoft在2016年内预定发售的[荣誉战魂],是基于MOBA类集团战斗,并加入了高度紧张的剑斗动作的多人 ...

  9. MATLAB介绍

    MATLAB MATLAB[1]  是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink ...

随机推荐

  1. Codeforces 645A Amity Assessment【八数码】

    题目链接: http://codeforces.com/problemset/problem/645/A 题意: 2*2的八数码问题 分析: 这题n为2,不需要搜索,直接判断字母排列顺序就好了. 注意 ...

  2. Layui动画、按钮、表单

    Layui动画.按钮.表单 在实用价值的前提之下,我们并没有内置过多花俏的动画.而他们同样在 layui 的许多交互元素中,发挥着重要的作用.layui 的动画全部采用 CSS3,因此不支持ie8和部 ...

  3. Same Tree (二叉树DFS)

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  4. Oracle 设置用户密码永不过期

    --1.查看用户的proifle,一般是default select username,profile from dba_users; --2.查看概要文件(default)的密码有效期设置 sele ...

  5. 【CV论文阅读】Unsupervised deep embedding for clustering analysis

    Unsupervised deep embedding for clustering analysis 偶然发现这篇发在ICML2016的论文,它主要的关注点在于unsupervised deep e ...

  6. 几种常见排序算法的java实现

    一.几种常见的排序算法性能比較 排序算法 最好时间 平均时间 最坏时间 辅助内存 稳定性 备注 简单选择排序 O(n^2) O(n^2) O(n^2) O(1) 不稳定 n小时较好 直接插入排序 O( ...

  7. Vmware worksiation中使用ISO

    Vmware技巧: 用ISO安装系统,需要添加2个CD设备. IDE 1  中选择 autoinst.iso IDE 2  中选择 “要安装的系统”.iso 简单讲:Vmware模拟机上需要模拟两次i ...

  8. 状压DP问题

    状态压缩·一 题目传送:#1044 : 状态压缩·一 AC代码: #include <map> #include <set> #include <list> #in ...

  9. Qt Quick之StackView具体解释(2)

    在"StackView具体解释(1)"中,我们学习了StackView的基本使用方法,这次呢,我们来讲delegate的定制.被管理的View的生命周期.查找View等主题. 本文 ...

  10. python 【目录】

    python[目录] python[第一篇]初识python python[第二篇]python基本数据类型 python[第三篇]python函数基础