使用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步,输出每一步的网格状态。

相关文章
|
2月前
|
Java
【Java】蚂蚁迷宫问题
【Java】蚂蚁迷宫问题
14 0
|
7月前
|
消息中间件 缓存 Java
远程面试阿里、蚂蚁、京东、美团后整理份283页Java核心面试宝典
本文整理了一些面试时面试官必问的知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。
|
7月前
|
NoSQL Dubbo Java
网易开发三年,现跳槽蚂蚁花呗,4面顺利通过,拿下Java岗offer
不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。 运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试:
|
消息中间件 缓存 Java
远程面试阿里、蚂蚁、京东、美团后整理份283页Java核心面试宝典
本文整理了一些面试时面试官必问的知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。 由于知识点比较全面,内容比较多,所以我将这些Java面试中的核心知识点汇总整理成了一份文档。文档已经上传到了百度云网盘,文末提供获取方式~
|
数据格式
java_试题 历届真题】兰顿蚂蚁【第五届】【省赛】【C组】
平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。   蚂蚁的头部朝向为:上下左右其中一方。
108 0
|
消息中间件 缓存 NoSQL
网易开发三年,现跳槽蚂蚁花呗,4面顺利通过,拿下Java岗offer
面试准备 不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。 运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试: 1. 自我介绍。(介绍自己的项目经历以及一些特长而不是简单自我介绍喜好等) 2. 自己面试中可能涉及哪些知识点、那些知识点是重点。 3. 面试中哪些问题会被经常问到、面试中自己该如何回答。 4. 自己的简历该如何写。
网易开发三年,现跳槽蚂蚁花呗,4面顺利通过,拿下Java岗offer
|
消息中间件 网络协议 关系型数据库
阿里蚂蚁集团JAVA一面
阿里蚂蚁集团JAVA一面
155 0
阿里蚂蚁集团JAVA一面
|
13天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
11天前
|
存储 监控 小程序
Java中的线程池优化实践####
本文深入探讨了Java中线程池的工作原理,分析了常见的线程池类型及其适用场景,并通过实际案例展示了如何根据应用需求进行线程池的优化配置。文章首先介绍了线程池的基本概念和核心参数,随后详细阐述了几种常见的线程池实现(如FixedThreadPool、CachedThreadPool、ScheduledThreadPool等)的特点及使用场景。接着,通过一个电商系统订单处理的实际案例,分析了线程池参数设置不当导致的性能问题,并提出了相应的优化策略。最终,总结了线程池优化的最佳实践,旨在帮助开发者更好地利用Java线程池提升应用性能和稳定性。 ####
|
13天前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####