大家好,表示欢迎。 对有兴趣前来讨论的新手老手表示感谢。
为了开发 app,刚开始学 2 天 java,于是就想写一个细胞自动机实践一下:
先说规则。细胞自动机是某某数学家发明,也叫 “生命游戏” (game of life),是一个特别能令人感兴趣的有趣算法!
具体规则是,一个二位矩阵(比如围棋棋盘),每个方格都是一个细胞,或者死,或者活。每个细胞的下一个状态,取决于它周围的八个细胞的当前状态。 对于一个活细胞,如果它周围的活细胞 = 2 or 3,那么它继续活,否则死。 对于一个死细胞,如果它周围的活细胞 = 3,那么它复活,否则继续死。
于是编程思路就来了。首先我建 x、y 两个数组,每个数组都代表一个 11 x 9 的矩阵 用循环来计算每个 x,然后赋值到 y,并输出 y 再用下一个循环来计算每个 y,然后赋值到 x,并输出 x。
多么无懈可击的一个思路!!! 然而到第二个循环就出错了,矩阵里莫名其妙多了两个活细胞!! 我设置的初始状态,是一个这样的形状:( 1 为活,0 为死)
00000000000
00000000000
00110001100
00101010100
00101010100
00001010000
00011011000
00011011000
00000000000
这个形状是 “ Tumbler ” 细胞循环中的一个状态,全部状态可以在这个在线玩生命游戏的网站测试: (见 1 楼) 网站里面可以选择 “ Tumbler ” 形状的预设。
我的程序,第一个计算结果是对的:
00000000000
00000000000
00110001100
01101010110
00001010000
00001010000
00000000000
00011011000
00000000000
但第二个开始,就有错误了:
00000000000
00000000000
01110001110
01101010110
00101010100 这行多出两个 1 ???
00000000000
00011011000
00000000000
00000000000
原因不明。根本就不知道什么什么情况,因为算法明明很简单! 源码如下,欢迎拿去品尝: (见 1 楼)
加油。好运。感谢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.