289. Game of Life LeetCode

来源:互联网 发布:ubuntu如何使用cd命令 编辑:程序博客网 时间:2024/05/01 22:17

题意:生命游戏,给出你这一秒的生物存活情况,和游戏规则。让你给出下一秒生物存活的情况。规则1:如果一个活细胞周围只有1个或者1个以下的活细胞,那么这个细胞下一秒将会死。规则2:如果一个活细胞周围有2个或者3个活细胞,那么这个细胞下一秒将会活着。规则3:如果一个活细胞周围有4个或者4个以上活细胞,那么这个细胞下一秒将会死。规则4:如果一个死细胞周围有3个活细胞,那么这个死细胞下一秒将会活过来。
题解:直接模拟。

class Solution {public:    void gameOfLife(vector<vector<int>>& board) {        int dir[8][2] = {{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};        int n = board.size();        int m = board[0].size();        for(int i = 0; i < n; i++)        {            for(int j = 0; j < m; j++)            {                int count1 = 0;                for(int k = 0; k < 8; k++)                {                    int tx = i + dir[k][0];                    int ty = j + dir[k][1];                    if(tx < 0 || ty < 0 || tx >= n || ty >= m) continue;                    if(board[tx][ty] == 1 || board[tx][ty] == 3 || board[tx][ty] == 4 || board[tx][ty] == 5) count1++;                }                if(count1 < 2 && board[i][j] == 1) board[i][j] = 3;                else if(count1 >= 2 && count1 <= 3 && board[i][j] == 1) board[i][j] = 4;                else if(count1 > 3 && board[i][j] == 1) board[i][j] = 5;                if(count1 == 3 && board[i][j] == 0) board[i][j] = 6;            }        }        for(int i = 0; i < n; i++)        {            for(int j = 0; j < m; j++)            {                if(board[i][j] == 3) board[i][j] = 0;                else if(board[i][j] == 4) board[i][j] = 1;                else if(board[i][j] == 5) board[i][j] = 0;                else if(board[i][j] == 6) board[i][j] = 1;            }        }    }};
0 0
原创粉丝点击