1
// Idea: Encode the value into 2-bit value, the first bit is the value of next2
// state, and the second bit is the value of current state5
void gameOfLife(vector<vector<int>> &board) {7
int n = board[0].size();8
for (int i = 0; i < m; ++i) {9
for (int j = 0; j < n; ++j) {13
for (int i = 0; i < m; ++i) {14
for (int j = 0; j < n; ++j) {19
void encode(vector<vector<int>> &board, int row, int col) {23
int n = board[0].size();24
int cur = board[row][col];25
if (row >= 1 && col >= 1) {26
ones += (board[row - 1][col - 1] & 1);27
zeros += !(board[row - 1][col - 1] & 1);30
ones += (board[row - 1][col] & 1);31
zeros += !(board[row - 1][col] & 1);33
if (row >= 1 && col < n - 1) {34
ones += (board[row - 1][col + 1] & 1);35
zeros += !(board[row - 1][col + 1] & 1);38
ones += (board[row][col + 1] & 1);39
zeros += !(board[row][col + 1] & 1);41
if (row < m - 1 && col < n - 1) {42
ones += (board[row + 1][col + 1] & 1);43
zeros += !(board[row + 1][col + 1] & 1);46
ones += (board[row + 1][col] & 1);47
zeros += !(board[row + 1][col] & 1);49
if (row < m - 1 && col >= 1) {50
ones += (board[row + 1][col - 1] & 1);51
zeros += !(board[row + 1][col - 1] & 1);54
ones += (board[row][col - 1] & 1);55
zeros += !(board[row][col - 1] & 1);57
if (ones < 2 && cur == 1) {59
} else if (ones >= 2 && ones <= 3 && cur == 1) {61
} else if (ones > 3 && cur == 1) {63
} else if (ones == 3 && cur == 0) {68
board[row][col] = cur;