元胞自动机
元胞自动机(Cellular Automata,简称CA,也有人译为细胞自动机、点格自动机或单元自动机等)。最初由数学家
Stanislaw M. Ulam(1909-1984)与 John von Neumann(1903-1957)于 1950
年代所提出,是时间和空间都离散的动力系统。
元胞自动机可用来研究很多一般现象,被广泛地应用到社会、经济、军事和科学研究的各个领域。例如,铁磁理论中的伊辛(Ising)模型、森林火灾传
播、非线性的化学反应扩散、湍流、生物的色斑沉积模式、材料断裂、晶体生长、生物繁衍等,以及图像处理、计算机绘图、大规模并行计算、密码学以及艺术研究
等。
细胞自动机是由一些特定规则的格子所组成,每个格子看做是一个细胞;每一个细胞可以具有一些状态,但是在某一时刻只能处一种状态之中。随着时间的变
化(我们称作“迭代”过程),格子上的每一个细胞根据周围细胞的情形,按照相同的法则而改变状态,换句话说,一个细胞的状态是由上一个时刻所围绕的细胞的
状态所决定。
著名的生命游戏(Game of Life)是二维的元胞自动机,由剑桥大学的数学家 John Horton Conway 于 1970
年所提出的。下面的例子是一个典型的生命游戏的动画(Gosper的"机枪"在产生"滑翔机",ref1
,ref2
)。
一维细胞自动机是由Stephen Wolfram 提出的。
细胞只能生存在一列紧连的方格里,每个细胞有左右两边的邻居,细胞在指定规则的迭代演算之后只能处于不同状态的其中之一,其中一组最简单的状态就是:
「生」或「死」,存活的细胞我们在方格内涂上特定单一的颜色,而死亡的细胞我们则不涂色。为了有良好的二维视觉效果,我们把新一次迭代的结果画在前一代的
下方,等到进行了足够的迭代次数之后,我们便可以“同时”看见细胞们每一次迭代的连续过程。
下一次迭代时,单元的生死状态由上一次的状态决定,不同的规则会得到不同的模式(ref
)。
本题选用一维元胞自动机的90规则。该规则说,如果在时刻(t-1)时,单元i的两个邻居(i-1)和(i+1)中至少有一个是“生”状态,则单元
i在t时刻也是“生”状态;否则单元为“死”状态。
你可以用两个boolean数组来模拟一维元胞自动机的状态变化。如果对应的元胞为“生”,则cell[i]取true,否则取false。上一时
刻的记录为old[]。规则90要求数组的长度为迭代步数N的两倍,下一时刻
cells[i] = old[i-1] ^ old[i+1];
初始状态是数组中央(即索引为N的那个元素)对应那个元胞是“生”状态,其它皆为“死”状态。
看看输出的结果是不是很熟悉?
输入:
一维元胞自动机迭代的次数N
输出:
对应的迭代图形
样例输入:
9↵
样例输出:
□□□□□□□□□*□□□□□□□□↵
□□□□□□□□*□*□□□□□□□↵
□□□□□□□*□□□*□□□□□□↵
□□□□□□*□*□*□*□□□□□↵
□□□□□*□□□□□□□*□□□□↵
□□□□*□*□□□□□*□*□□□↵
□□□*□□□*□□□*□□□*□□↵
□□*□*□*□*□*□*□*□*□↵
import java.util.Scanner;
public class Main {
public static void print(boolean b){
if(b == true){
System.out.print("*");
}else{
System.out.print(" ");
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
boolean[][] be = new boolean[N][N*2];
for(int i=0;i<2*N;i++){
if(i != N){
be[0][i] = false;
}else {
be[0][i] = true;
}
print(be[0][i]);
}
System.out.println();
for(int i=1;i<N-1;i++){
for(int j=0;j<2*N;j++){
if(j+1>=2*N){
be[i][j] = be[i-1][j-1];
}else if(j-1<0){
be[i][j] = be[i-1][j+1];
}else{
be[i][j] = be[i-1][j-1]^be[i-1][j+1];
}
print(be[i][j]);
}
System.out.println();
}
}
}
分享到:
相关推荐
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、生物、社会和计算机科学等多个领域。在材料科学中,特别是金属材料的形变与再结晶过程,元胞自动机模型因其灵活性和...
一维元胞自动机的C语言实现:深入解析与扩展 元胞自动机(Cellular Automata,简称CA)是一种由多个状态简单的元胞组成的离散系统,它们根据一定的规则随时间演进。一维元胞自动机是最简单的一类元胞自动机,其结构...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于数学、物理、生物、计算机科学等多个领域。在MATLAB中实现元胞自动机,可以帮助我们更好地理解和模拟复杂系统的行为。本资源提供了MATLAB实现...
### 一维元胞自动机知识点详解 #### 1. 元胞自动机概述 元胞自动机(Cellular Automata, CA)是一种数学模型,它由一系列状态相同的元胞组成,这些元胞按照一定的规则随时间变化。元胞自动机在计算机科学、物理学...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、生物、社会和计算机科学等多个领域。在这个模型中,空间被划分为许多等同的单元,称为元胞,每个元胞都有一个状态,...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,由一系列规则简单的单元格构成,每个单元格都处于一种有限的状态集合中。在时间的推移下,单元格的状态会根据其自身状态以及相邻单元格的状态进行演变。184...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、化学、生物、社会学以及交通流模拟等多个领域。本项目着重于利用元胞自动机来模拟单车道的交通流动态,通过Matlab...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、生物、社会和计算机科学等多个领域。在金属材料科学中,元胞自动机法被用来模拟多晶材料的晶粒生长过程,这是一种...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、化学、生物等多个领域。在这个特定的场景中,我们关注的是它在金属腐蚀模拟中的应用。金属腐蚀是一个复杂的化学过程...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括交通流模拟。在交通工程领域,元胞自动机模型可以用来模拟单车道或多车道道路上车辆的运动规律,预测交通流量、车速分布等...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、生物、社会和计算机科学等多个领域。在MATLAB中,我们可以利用其强大的编程环境来实现元胞自动机的模拟和分析。本...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、生物、社会、经济以及计算机科学等多个领域。它由一系列规则简单的单元(称为元胞)组成,每个元胞都有有限的状态,...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、生物、社会学、计算机科学等多个领域。它由一串处于不同状态的元胞组成,每个元胞根据其自身状态以及相邻元胞的状态...
元胞自动机(Cellular Automata,简称CA)与神经网络是两种在计算科学和理论物理学中广泛应用的模型。在2013年的数学建模A题中,这两个概念被结合在一起,探讨了它们在交通流模拟和道路管理中的应用。 元胞自动机是...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、生物、社会和计算机科学等领域。在交通模拟中,元胞自动机能够很好地捕捉交通流的动态特性,如车辆的加速、减速、...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括交通流模拟。在交通工程领域,元胞自动机模型因其灵活性和强大的描述能力,已经成为研究交通流动性的有效工具。标题中的"单...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、生物、社会、经济等多个领域。在MATLAB环境中实现元胞自动机,可以利用其强大的数值计算和图形可视化功能。下面将...
元胞自动机(Cellular Automata,简称CA)是一种离散模型,广泛应用于复杂系统的研究,包括物理、生物、社会学以及计算机科学等多个领域。它由一串处于不同状态的单元格组成,每个单元格根据其自身状态和相邻单元格...