兰顿蚂蚁是一个经典的计算机科学问题,它模拟了一只蚂蚁在一个无限大的网格上移动的行为。下面是一个使用Java模拟兰顿蚂蚁的示例代码:
public class LangtonAnt {
private int[][] grid;
private int antX;
private int antY;
private int antDirection; // 0: up, 1: right, 2: down, 3: left
public LangtonAnt(int size) {
grid = new int[size][size];
antX = size / 2;
antY = size / 2;
antDirection = 0;
}
public void run(int steps) {
for (int i = 0; i < steps; i++) {
flipColor();
moveAnt();
printGrid();
}
}
private void flipColor() {
if (grid[antY][antX] == 0) {
grid[antY][antX] = 1;
antDirection = (antDirection + 1) % 4;
} else {
grid[antY][antX] = 0;
antDirection = (antDirection - 1 + 4) % 4;
}
}
private void moveAnt() {
switch (antDirection) {
case 0: // up
antY--;
break;
case 1: // right
antX++;
break;
case 2: // down
antY++;
break;
case 3: // left
antX--;
break;
}
}
private void printGrid() {
StringBuilder sb = new StringBuilder();
for (int[] row : grid) {
for (int cell : row) {
sb.append(cell == 0 ? " " : "#");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
public static void main(String[] args) {
LangtonAnt ant = new LangtonAnt(20);
ant.run(200);
}
}
在这个示例代码中,首先定义了一个表示网格的二维数组grid
,以及蚂蚁的当前位置antX
和antY
,蚂蚁的当前朝向antDirection
。在构造函数中,我们创建一个指定大小的网格,并将蚂蚁的初始位置设置为网格中心。
run
方法模拟蚂蚁移动的过程。在每一步中,蚂蚁会根据当前所在位置的颜色进行翻转,然后根据当前朝向移动到下一个位置。最后,调用printGrid
方法打印出当前网格的状态。
在flipColor
方法中,如果蚂蚁所在位置的颜色为0,则将其翻转为1,并将蚂蚁的朝向顺时针旋转90度;如果颜色为1,则将其翻转为0,并将蚂蚁的朝向逆时针旋转90度。
在moveAnt
方法中,根据当前朝向更新蚂蚁的坐标。
最后,在main
方法中创建一个大小为20的网格,并模拟蚂蚁运动200步,输出每一步的网格状态。