funcgameOfLife(board [][]int){
tmp :=make([][]int,len(board))for i:=0;i<len(board);i++{
tmp[i]=make([]int,len(board[i]))copy(tmp[i],board[i])}
path :=[8][2]int{{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}var live, x, y intfor i :=0; i <len(board); i++{for j :=0; j <len(board[i]); j++{
live =0for_, p :=range path {
x, y = i+p[0], j+p[1]if x >=0&& x <len(board)&& y >=0&& y <len(board[i]){if tmp[x][y]==1{
live++}}}// 判断周围是不是有三个活细胞if tmp[i][j]==1{if live <2|| live >3{
board[i][j]=0}}elseif live ==3{
board[i][j]=1}}}}
原地写法
funcgameOfLife(board [][]int){
m :=len(board)if m ==0{return}
n :=len(board[0])
path :=[8][2]int{{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}for i :=0;i<m;i++{for j :=0;j < n ;j++{for_,p:=range path{
x,y := i+p[0],j+p[1]// 细胞周围原先是1的数量,奇数表示该位置原先是活的if x >=0&& x < m && y >=0&& y <n && board[x][y]%2==1{
board[i][j]+=2}}}}for i :=0;i<m;i++{for j :=0;j < n ;j++{// 5 表示原先是活的,周围两个活得// 6 表示原先是死的,周围三个活得// 7 表示原先是活的,周围三个活得if board[i][j]>4&& board[i][j]<8{
board[i][j]=1}else{
board[i][j]=0}}}}