生命游戏。

生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少,这个细胞会因太孤单而死去。实际中,你可以设定周围活细胞的数目怎样时才适宜该细胞的生存。如果这个数目设定过高,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过低,世界中又会被生命充满而没有什么变化。实际中,这个数目一般选取2或者3;这样整个生命世界才不至于太过荒凉或拥挤,而是一种动态的平衡。这样的话,游戏的规则就是:当一个方格周围有2或3个活细胞时,方格中的活细胞在下一个时刻继续存活;即使这个时刻方格中没有活细胞,在下一个时刻也会“诞生”活细胞。在这个游戏中,还可以设定一些更加复杂的规则,例如当前方格的状况不仅由父一代决定,而且还考虑祖父一代的情况。你还可以作为这个世界的上帝,随意设定某个方格细胞的死活,以观察对世界的影响。

以上内容来自百度。某公司线上笔试出了这么一个编程题。模仿了有限的二维空间(x*y)的情况,输入当前时刻,得到下一时刻的状态。

代码很简单 ,运行通过了测试,当然我也不知道是否完全正确。只是记录一下,归于ACM吧 。望批评指正。

下面是我的代码():

  1 #include <iostream>
  2 
  3 
  4 using namespace std;
  5 
  6 void Test(int x,int y);
  7 char**  imalloc(int x,int y);
  8 void ifree(int x,char** Temp);
  9 char **now    =    NULL;
 10 char **next    =    NULL;
 11 
 12 int main()
 13 {
 14     int x    =    0;
 15     int y    =    0;
 16     int i = 0;
 17     
 18     
 19     while(cin>>x>>y)
 20     {
 21         //申请内存
 22         now    =    imalloc(x+2,y+3);    //申请(x+1)*(y+1) 外加每行后面的“”
 23         next=    imalloc(x,y+1);
 24         
 25         //输入
 26         for (i = 0;i<x;i++)
 27         {    
 28             cin>>*(now+i+1)+1;
 29             
 30         }
 31         Test(x,y);
 32         
 33         //输出
 34         cout<<x<<" "<<y<<endl;
 35         for (i = 0;i<x;i++)
 36         {
 37             cout<<*(next+i)<<endl;
 38         }
 39         
 40         //释放内存
 41         ifree(x+2,now);
 42         ifree(x,next);
 43         
 44     }
 45     
 46     return 0;
 47 }
 48 char** imalloc(int x,int y)
 49 {
 50     int i    =    0;
 51     
 52     char** Temp    =    new char*[x];
 53     for (i=0;i<x;i++)
 54     {
 55         *(Temp+i)    =    new char[y];    
 56         memset(*(Temp+i),0,y);
 57         
 58     }
 59     return Temp;
 60 
 61 
 62 }
 63 void ifree(int x,char** Temp)
 64 {
 65     int i =0;
 66     for (i=0;i<x;i++)
 67     {
 68         delete *(Temp+i);        
 69     }
 70     delete Temp;
 71 
 72 }
 73 void Test(int x,int y)
 74 {
 75 
 76     int i = 0;
 77     int j = 0;
 78     for (i=0;i<x;i++)
 79     {
 80 
 81         for (j=0;j<y;j++)
 82         {
 83             int iCount    =    0;
 84             //判断邻居的情况呀
 85             //左上
 86             if (now[i][j]=='*')
 87             {
 88                 iCount++;
 89             }
 90             //
 91             if (now[i][j+1]=='*')
 92             {
 93                 iCount++;
 94             }
 95             //右上
 96             if (now[i][j+2]=='*')
 97             {
 98                 iCount++;
 99             }
100             //
101             if (now[i+1][j]=='*')
102             {
103                 iCount++;
104             }
105             //
106             if (now[i+1][j+2]=='*')
107             {
108                 iCount++;
109             }
110             //左下
111             if (now[i+2][j]=='*')
112             {
113                 iCount++;
114             }
115             //
116             if (now[i+2][j+1]=='*')
117             {
118                 iCount++;
119             }
120             //右上
121             if (now[i+2][j+2]=='*')
122             {
123                 iCount++;
124             }
125         
126             //判断当前位置的下一刻
127             if (now[i+1][j+1]=='*')    //当前活着
128             {    
129                 if (iCount<2||iCount>3)
130                 {
131                     next[i][j]    =    '.';
132                 }
133                 else if (iCount==2||iCount==3)
134                 {
135                     next[i][j]    =    '*';
136                 }
137 
138             }
139             else if (now[i+1][j+1]=='.')//当前死亡
140             {
141                 
142                 if (iCount==3)
143                 {
144                     next[i][j]    =    '*';
145                 }
146                 else
147                 {
148                     next[i][j]    =    '.';
149                 }
150             }
151         
152         }
153     }
154 }
原文地址:https://www.cnblogs.com/icqw/p/4882641.html