使用java模拟兰顿蚂蚁

发布时间:2024年01月19日

兰顿蚂蚁是一个经典的计算机科学问题,它模拟了一只蚂蚁在一个无限大的网格上移动的行为。下面是一个使用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,以及蚂蚁的当前位置antXantY,蚂蚁的当前朝向antDirection。在构造函数中,我们创建一个指定大小的网格,并将蚂蚁的初始位置设置为网格中心。

run方法模拟蚂蚁移动的过程。在每一步中,蚂蚁会根据当前所在位置的颜色进行翻转,然后根据当前朝向移动到下一个位置。最后,调用printGrid方法打印出当前网格的状态。

flipColor方法中,如果蚂蚁所在位置的颜色为0,则将其翻转为1,并将蚂蚁的朝向顺时针旋转90度;如果颜色为1,则将其翻转为0,并将蚂蚁的朝向逆时针旋转90度。

moveAnt方法中,根据当前朝向更新蚂蚁的坐标。

最后,在main方法中创建一个大小为20的网格,并模拟蚂蚁运动200步,输出每一步的网格状态。

文章来源:https://blog.csdn.net/huayula/article/details/135688052
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。