程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> leetcode筆記:Game of Life

leetcode筆記:Game of Life

編輯:關於C++

一. 題目描述

According to the Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970.”

Given a board with m by n cells, each cell has an initial state live (1) or dead (0). Each cell interacts with its eight neighbors (horizontal, vertical, diagonal) using the following four rules (taken from the above Wikipedia article):

Any live cell with fewer than two live neighbors dies, as if caused by under-population.

Any live cell with two or three live neighbors lives on to the next generation.

Any live cell with more than three live neighbors dies, as if by over-population..

Any dead cell with exactly three live neighbors becomes a live cell, as if by reproduction.

Write a function to compute the next state (after one update) of the board given its current state.

二. 題目分析

題目很長,大意如下:

給定一個由0,1組成的矩陣,每一個元素表示一個細胞的存活,1存活,0死亡,其中下一次更新每個細胞的存活由上、下、左、右、左上、左下、右上、右下,八個細胞決定,存活規則如下:

當前細胞為存活狀態時,當周圍存活細胞不到2個時, 該細胞變成死亡狀態。(模擬生命數量稀少)

當前細胞為存活狀態時,當周圍有2個或3個存活的細胞時, 該細胞保持原樣。

當前細胞為存活狀態時,當周圍有3個以上的存活細胞時,該細胞變成死亡狀態。(模擬生命數量過多)

當前細胞為死亡狀態時,當周圍恰好有3個存活細胞時,該細胞變成存活狀態。 (模擬繁殖)

要求寫一個函數,根據矩陣當前的狀態,計算這個細胞矩陣的下一個狀態。

題目要求in-place操作,考慮到每個元素都受附近8個元素的影響,必須使用一種中間狀態來記錄元素變化,這種中間狀態應該能反應元素變化前變化後的狀態。

好在題目給出了四種變化狀態,比較直觀地給出了思路:

狀態0: 死細胞->死細胞
狀態1: 活細胞->活細胞
狀態2: 活細胞->死細胞
狀態3: 死細胞->活細胞

對每個元素進行判斷,根據附近8個元素及本身的狀態可得到狀態0~4中的一個,而下一個元素依然可根據上一元素的狀態0~4,判斷上一元素變化之前是什麼狀態。

而對所有元素標記狀態0~4後,再一次遍歷矩陣,所有元素的狀態對2取余,那麼狀態0和2就變成死細胞,狀態1和3就是活細胞,達成目的。

三. 示例代碼

class Solution
{
public:
  void gameOfLife(vector>& board)
  {
    int rows=board.size();
    if(rows==0)
      return ;
    int colums=board[0].size();
    if(colums==0)
      return ;
    for(int i=0; i>& board,int rows,int colums,int x,int y)
  {
    int sum=0;
    for(int i=x-1; i=0&&i=0&&j

四. 小結

該題目在in-place的要求下,是一道有趣的題目。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved