假设有一个大小为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

最新文章

  1. python gettitle v2.0
  2. &lt;HTML&gt;菜鸟入门基础须知
  3. 设计模式--5.5 代理模式-通用代码及aop
  4. mysql忘记密码
  5. 不同编程语言打印“元旦快乐!&quot;
  6. MongoDB管理工具的插件系统
  7. vim 空格 制表符
  8. 用非管理员权限启动主程序,并用管理员权限启动子程序,导致WM_COPYDATA消息发送失败的问题
  9. 几款web开发常用jquery特效代码
  10. EasyUI 我的第一个窗口
  11. php面向对象的多态
  12. 基于Jquery的Ajax分页,只有上一页和下一页
  13. PhpStorm创建Drupal模块项目开发教程(5)
  14. JS实现全选功能
  15. 《Java技术》第一次作业——Java语言基础
  16. Mysql 字符串分隔函数
  17. Perl IO:操作系统层次的IO
  18. 20165315 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解
  19. ASP.NET Core Identity 实战(2)——注册、登录、Claim
  20. redis配置笔记

热门文章

  1. Core java for impatient 笔记 ch8 流
  2. JDBC的Statement对象
  3. MongoDB小结08 - update【$pull】
  4. 学习javascript 非常好的博客
  5. C#.NET 如何在系统变量中加入新的环境变量
  6. 【BLE】CC2541之自己定义长短按键
  7. form 表单序列化 serialize
  8. 使用bbed改动数据
  9. 关于jiffies回绕以及time_after,time_before
  10. C#.NEt-GDI+中的Pen測试