使用java模拟兰顿蚂蚁

简介: 使用java模拟兰顿蚂蚁

兰顿蚂蚁是一个经典的计算机科学问题,它模拟了一只蚂蚁在一个无限大的网格上移动的行为。下面是一个使用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步,输出每一步的网格状态。

相关文章
|
1月前
|
存储 缓存 安全
面霸篇:高频 Java 基础问题(核心卷一)
面霸篇:高频 Java 基础问题(核心卷一)
114 0
|
1月前
|
NoSQL Java 应用服务中间件
Java模拟面试总结
Java模拟面试总结
|
7月前
|
消息中间件 缓存 NoSQL
Java面试题 -系统解决方案
Java面试题 -系统解决方案
52 0
|
1月前
|
前端开发 Java Python
|
8月前
|
设计模式 算法 安全
java202303java学习笔记第三十四天综合练习1
java202303java学习笔记第三十四天综合练习1
43 0
java202303java学习笔记第三十四天综合练习2
java202303java学习笔记第三十四天综合练习2
44 0
java202303java学习笔记第三十四天异常体系介绍1
java202303java学习笔记第三十四天异常体系介绍1
39 0
|
网络协议 NoSQL Java
模拟面试一(Java)
模拟面试一(Java)
141 1
模拟面试一(Java)