福海网站制作,培训教育类网站模板下载,网站建设需准备什么软件,平台网站建设所需资质289. 生命游戏 
题目描述#xff1a; 根据 百度百科 #xff0c; 生命游戏 #xff0c;简称为 生命 #xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 
给定一个包含 m  n 个格子的面板#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初…289. 生命游戏 
题目描述 根据 百度百科  生命游戏 简称为 生命 是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。 
给定一个包含 m × n 个格子的面板每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态 1 即为 活细胞 live或 0 即为 死细胞 dead。每个细胞与其八个相邻位置水平垂直对角线的细胞都遵循以下四条生存定律 
如果活细胞周围八个位置的活细胞数少于两个则该位置活细胞死亡 如果活细胞周围八个位置有两个或三个活细胞则该位置活细胞仍然存活 如果活细胞周围八个位置有超过三个活细胞则该位置活细胞死亡 如果死细胞周围正好有三个活细胞则该位置死细胞复活 下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的其中细胞的出生和死亡是同时发生的。给你 m x n 网格面板 board 的当前状态返回下一个状态。 希望在原地数组解决问题  考察重点在原矩阵基础上原地将矩阵每个位置根据该点周围8个点的原矩阵值转换为新值。使用way数组代替走的方向从上至下从左至右依次遍历。oneNum记录活细胞个数board[x][y]2记录本轮复活的元素3记录本轮死亡的元素在递归完成回溯的时候再将二者转化为01。 
var way [][]int  [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}func dfs(board [][]int, x, y int) {oneNum : 0xLen, yLen : len(board), len(board[0])if y  yLen {if x  xLen-1 {x, y  x1, 0} else {return}}for i : 0; i  len(way); i {tempx : x  way[i][0]tempy : y  way[i][1]if tempx  xLen || tempx  0 || tempy  yLen || tempy  0 {continue}switch board[tempx][tempy] {case 1:oneNumcase 2:continuecase 0:continuecase 3:oneNum}}if board[x][y]  1 {if oneNum  2 {board[x][y]  3} else if oneNum  3 {board[x][y]  1} else {board[x][y]  3}} else {if oneNum  3 {board[x][y]  2} else {board[x][y]  0}}dfs(board, x, y1)if board[x][y]  3{board[x][y]  0}else if board[x][y]  2{board[x][y]  1}
}
func gameOfLife(board [][]int) {dfs(board, 0, 0)
}