Leetcode 289. 生命游戏(元胞自动机模拟)
时间:2022-07-26
本文章向大家介绍Leetcode 289. 生命游戏(元胞自动机模拟),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。
给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:
如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡; 如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活; 如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡; 如果死细胞周围正好有三个活细胞,则该位置死细胞复活; 根据当前状态,写一个函数来计算面板上所有细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。
示例:
输入: [ [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 {
public void gameOfLife(int[][] board) {
int n=board.length,m=board[0].length;
int [][]ans=new int[n][m];
int []d={0,-1,1};
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
int cnt=0;
for(int k1=0;k1<3;k1++)
{
for(int k2=0;k2<3;k2++)
{
if(!(k1==0&&k2==0))
{
int dx=i+d[k1],dy=j+d[k2];
if(dx>=0&&dx<n&&dy>=0&&dy<m&&board[dx][dy]==1)
{
cnt++;
//System.out.println(dx+" "+dy+" "+board[dx][dy]);
}
}
}
}
//System.out.println(i+" "+j+" "+cnt);
if(board[i][j]==0)
{
if(cnt==3)ans[i][j]=1;
else ans[i][j]=0;
}
else
{
if(cnt<2)ans[i][j]=0;
if(cnt==2||cnt==3)ans[i][j]=1;
if(cnt>3)ans[i][j]=0;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
board[i][j]=ans[i][j];
}
}
}
}
- NYOJ-----素数环
- HDUOJ-----(1329)Calling Extraterrestrial Intelligence Again
- 修改WordPress默认评论表情(附:跳转到多说评论框的方法)
- HDUOJ--------(1312)Red and Black
- HDUOJ---------(1045)Fire Net
- HDUOJ----(1175)连连看
- HDUOJ-----(1072)Nightmare(bfs)
- deque容器的运用一点一点积累
- HDUOJ----(1016)Prime Ring Problem
- WordPress获取文章浏览总数
- HDUOJ----Safecracker(1015)
- hduoj---Tempter of the Bone
- nyoj------------找球号(一)
- nyoj------擅长排列的小明
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JeeSite | Excel 导入导出
- 贪心法--哈夫曼编码
- 基于maven+ssm的增删改查之使用mybatis逆向工程生成相关文件
- Arrays 的二分查找
- (四十四)golang--协程(goroutine)和管道(channel)相结合实例
- 基于maven+ssm的增删改查之测试相关ssm环境是否成功
- 基于maven+ssm的增删改查之带分页的显示员工相关信息(基于bootstrap)
- (四十五)golang--反射
- 基于maven+ssm的增删改查之前后端之间使用json进行交互(显示员工信息)
- 动态规划--矿工挖矿
- 基于maven+ssm的增删改查之添加员工实现
- MyBatis 构造动态 SQL 语句
- 基于maven+ssm的增删改查之前端校验数据合法性
- 基于maven+ssm的增删改查之spring+springmvc+mybatis环境搭建
- STS 创建 Maven 项目填坑