兰顿蚂蚁是一个经典的计算机科学问题,它模拟了一只蚂蚁在一个无限大的网格上移动的行为。下面是一个使用Java模拟兰顿蚂蚁的示例代码:
public class LangtonAnt {private int[][] grid;private int antX;private int antY;private int antDirection; // 0: up, 1: right, 2: down, 3: leftpublic 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: // upantY--;break;case 1: // rightantX++;break;case 2: // downantY++;break;case 3: // leftantX--;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步,输出每一步的网格状态。