生态系统游戏,输入一个01矩阵,0代表死了,1代表活着,这是当前状态,求下一个状态:
1.当前格子活的:
1)周围活着的格子<2或者>3,则当前格子死
2)否则当前格子保持
2.当前格子死:
1)周围活着的格子==3,则当前格子活
2)否则当前格子保持
周围格子是指周围8个
如果不要求空间可以重新申请一个矩阵,遍历当前矩阵然后把结果放在新申请的矩阵
要求空间O1,则这里用到一个技巧,其实不算位运算,不过也算利用了二进制位:
一个格子无非四种状态,用0,1,2,3保存,即保存了转换后的状态又保存了转换前状态:
0:dead->dead
3:dead->live
1:live->live
2:live->dead
最后再遍历一遍矩阵,所有格子&1即可
1 class Solution { 2 public: 3 int get(vector> v,int i,int j){ 4 int d[8][2]={ {-1,0},{ 1,0},{ 0,-1},{ 0,1},{-1,-1},{ 1,1},{-1,1},{ 1,-1}}; 5 int cnt=0; 6 for(int k=0;k<8;k++){ 7 int x=i+d[k][0]; 8 int y=j+d[k][1]; 9 if(x>=0&&x =0&&y