您的位置:首页 > Web前端

game of life

2015-10-24 16:36 190 查看
class Solution {
public:
void gameOfLife(vector<vector<int>>& board) {
queue<int> temp_state;
int row = board.size();
int i,j;
if(row < 1) return;
int col = board[0].size();
if(col <1) return;
for(i=0;i<row;i++)
for(j=0;j<col;j++){
int state_i_j = next_state(board,i,j);
temp_state.push(state_i_j);
if((j == col-1)) {  //每行最后一个元素 更新
if((i>=1)){          //如果不是第一行,更新前一行
for(int z=0;z<col;z++){
board[i-1][z] = temp_state.front();
temp_state.pop();
}
}
if((i==row-1)){  //如果是最后一行,更新当前行
for(int z=0;z<col;z++){
board[i][z] = temp_state.front();
temp_state.pop();
}
}
}
}
}

int next_state(vector<vector<int>>& board,int i,int j){
int sum = 0;

int row = board.size();
int col = board[0].size();

if(board[i][j] == 1){
if(i-1 >=0){
if(j-1>=0 && board[i-1][j-1] == 1) sum++;
if(board[i-1][j] == 1) sum++;
if(j+1<col && board[i-1][j+1] == 1) sum++;
}
if(i+1 < row){
if(j-1>=0 && board[i+1][j-1] == 1) sum++;
if(board[i+1][j] == 1) sum++;
if(j+1<col && board[i+1][j+1] == 1) sum++;
}
if(j-1>=0 && board[i][j-1] == 1) sum++;
if(j+1< col && board[i][j+1] == 1) sum++;
if(sum==2 || sum ==3) return 1;
return 0;
}

if(board[i][j] == 0){
if(i-1 >=0){
if(j-1>=0 && board[i-1][j-1] == 1) sum++;
if(board[i-1][j] == 1) sum++;
if(j+1<col && board[i-1][j+1] == 1) sum++;
}
if(i+1 < row){
if(j-1>=0 && board[i+1][j-1] == 1) sum++;
if(board[i+1][j] == 1) sum++;
if(j+1<col && board[i+1][j+1] == 1) sum++;
}
if(j-1>=0 && board[i][j-1] == 1) sum++;
if(j+1< col && board[i][j+1] == 1) sum++;
if(sum ==3) return 1;
return 0;
}

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: