网站上怎么做弹幕效果,仿站小工具+wordpress,新塘网站建设,wordpress搜索结果模板模拟 染色
思路#xff1a; 可以复制一个表格#xff0c;然后根据规则两层循环模拟出结果#xff0c;但是空间复杂度太高#xff1b;可以复用原有数组#xff0c;对其进行染色标记#xff1b; 最终状态是活的标记值 1#xff0c;还原标记值时可以使用规则 val 染色
思路 可以复制一个表格然后根据规则两层循环模拟出结果但是空间复杂度太高可以复用原有数组对其进行染色标记 最终状态是活的标记值 1还原标记值时可以使用规则 val 0之前是活的现在是死的标记成 -1统计活细胞时可以使用规则 abs(val) 1根据规则归纳 R1如果活细胞周围八个位置的活细胞数少于两个则该位置活细胞死亡状态由 live 变成 die用 -1 标记原状态是 live需要被统计成活细胞R2如果活细胞周围八个位置有两个或三个活细胞则该位置活细胞仍然存活状态没有发生变化R3如果活细胞周围八个位置有超过三个活细胞则该位置活细胞死亡状态由 live 变成 die用 -1 标记原状态是 live需要被统计成活细胞R4如果死细胞周围正好有三个活细胞则该位置死细胞复活状态由 die 变成 live用 2 标记最终状态是 live进行两次两重循环遍历 第一次进行染色第二次染色还原
class Solution {
public:void gameOfLife(vectorvectorint board) {int row board.size();if (0 row) {return;}int column board[0].size();if (0 column) {return;}for (int r 0; r row; r) {for (int c 0; c column; c) {int live 0;// statistics neighborsif (r 0 c 0) {// direct NWif (std::abs(board[r - 1][c - 1]) 1) {live;}}if (r 0) {// direct Nif (std::abs(board[r - 1][c]) 1) {live;} }if (c 0) {// direct Wif (std::abs(board[r][c -1]) 1) {live;}}if (r 1 row) {if (c 0) {// direct SWif (std::abs(board[r 1][c - 1]) 1) {live;}}// direct Sif (std::abs(board[r 1][c]) 1) {live;}}if (c 1 column) {// direct Eif (std::abs(board[r][c 1]) 1) {live;}if (r 0) {// direct NEif (std::abs(board[r - 1][c 1]) 1) {live;}}// direct SEif (r 1 row) {// direct NEif (std::abs(board[r 1][c 1]) 1) {live;}}}// rule 1 3if (board[r][c] 1 (live 2 || live 3)) {// mark live - dieboard[r][c] -1;}// rule 4if (board[r][c] 0 live 3) {// mark die - liveboard[r][c] 2;}}}// recoverfor (int r 0; r row; r) {for (int c 0; c column; c) {if (board[r][c] 0) {board[r][c] 1;} else {board[r][c] 0;}}}}
};
统计活细胞数量的逻辑比较朴素可以进一步归纳美化