生命游戏

生命游戏

 


 

变量简洁正确完整思路
如果是1,123规则,如果是0,4规则,赋值tmp,遍历原数组每个元素,if1if0,用tmp
判断8个方向,dxdy,cnt计算八个方向活细胞
class Solution {
public:
    void gameOfLife(vector<vector<int>>& board) {
        vector<vector<int>>tmp(board);
        int n=board.size(),m=board[0].size();
        int xx[]={-1,-1,-1,0,0,1,1,1};
        int yy[]={-1,0,1,-1,1,-1,0,1};
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                int cnt=0;
                for(int k=0;k<8;k++){
                    int dx=xx[k]+i,dy=yy[k]+j;
                    if(dx>=0&&dx<n&&dy>=0&&dy<m&&tmp[dx][dy]==1)cnt++;
                }
                if(board[i][j]==1){
                    if(cnt<2||cnt>3)board[i][j]=0;
                }else {
                    if(cnt==3)board[i][j]=1;
                }
            }
        }
    }
};

变量简洁正确完整思路
如果是1,123规则变成0则写作2,如果是0变成1写作3,统计的时候注意23
恢复23
class Solution {
public:
    void gameOfLife(vector<vector<int>>& board) {
        int n=board.size(),m=board[0].size();
        int xx[]={-1,-1,-1,0,0,1,1,1};
        int yy[]={-1,0,1,-1,1,-1,0,1};
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                int cnt=0;
                for(int k=0;k<8;k++){
                    int dx=xx[k]+i,dy=yy[k]+j;
                    if(dx>=0&&dx<n&&dy>=0&&dy<m&&(board[dx][dy]==1||board[dx][dy]==2))cnt++;
                }
                if(board[i][j]==1){
                    if(cnt<2||cnt>3)board[i][j]=2;
                }else {
                    if(cnt==3)board[i][j]=3;
                }
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(board[i][j]==2)board[i][j]=0;
                if(board[i][j]==3)board[i][j]=1;
            }
        }
    }
};

 

上一篇:贪吃蛇(C语言实现)


下一篇:井字游戏