兰顿蚂蚁:从无序到有序的伟大征程

这篇具有很好参考价值的文章主要介绍了兰顿蚂蚁:从无序到有序的伟大征程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 问题

在一个1000*1000格子的棋盘上,有一只蚂蚁(ant),蚂蚁的爬行规则是:(1)如果蚂蚁所在的棋盘是白色的,则蚂蚁将所在格子设置为黑色,并向右边爬行一个格子。(2)如果蚂蚁所在的棋盘是黑色的,则蚂蚁将所在格子设置为白色,并向左边爬行一个格子。问:请显示蚂蚁爬行10000次后,棋盘的样子。

2. 思考

首先,我们需要创建一个棋盘类(Board)和一个蚂蚁类(Ant)。棋盘类包含一个二维数组表示棋盘的状态,以及一个方法用于显示棋盘。蚂蚁类包含蚂蚁当前的位置和爬行方法。

解析:

  1. 创建棋盘类(Board),包含一个二维数组表示棋盘状态,以及一个方法用于显示棋盘。
  2. 创建蚂蚁类(Ant),包含蚂蚁当前的位置.方向,和爬行方法 move。
  3. 在主函数中,创建一个1000*1000的棋盘实例和一个蚂蚁实例。
  4. 让蚂蚁爬行10000次。
  5. 显示爬行后的棋盘状态。

3. 代码

3.1 设计 Board类 和 Ant 类, 代码如下:

import matplotlib.pyplot as plt
import numpy as np

class Board:
    def __init__(self, size):
        self.size = size
        # 创建初始棋盘,设置为全0的格子: 注意: 0 表示 白色,1表示 黑色
        self.board = np.zeros((size, size))
        
    def display(self):
        # Create the figure and axes
        fig, ax = plt.subplots()
        # Display the array as an image using imshow
        # cmap='gray' sets the colormap to grayscale
        # imshow 似乎 0 表示黑的,1 表示白色,因此,我这里用函数 np.logical_not()取反了一下 
        plt.imshow(np.logical_not(self.board), cmap='gray')  
        # Set axis labels and title (optional)
        ax.set_xlabel("X-axis")
        ax.set_ylabel("Y-axis")
        ax.set_title("Footprint of Ant on 2D World")
        # Display the plot
        plt.show()
		
		
class Ant:
    def __init__(self, board):
        # 假定初始在 棋盘中央
        self.x = board.size // 2
        self.y = board.size // 2
        # 假定初始方向朝上, 90度
        self.direction = 90
        
    def climb_one(self, board):
        if self.direction == 0 :       # right, 向右边爬行一格
            self.x = self.x + 1
        elif self.direction == 270:    # down,  向下爬行一格
            self.y = self.y - 1             
        elif self.direction == 180:    # left,   向左爬行一格
            self.x = self.x - 1
        elif self.direction == 90:     # up,     向上爬行一格
            self.y = self.y + 1  
        # 处理一下跑出边界问题:
        #    如果小于0, 则移动到最大值处, PS: 这样设置是有部分道理的,因为小于0 时候,direction是向左 或 向上的,
        #                                 移动到最大值时候,ant 方向向内
        #    如果大于最大值,则移动到0 处
        if self.x == -1 : 
            self.x = board.size - 1
        if self.y == -1 : 
            self.y = board.size - 1
        if self.x == board.size - 1 : 
            self.x = 0
        if self.y == board.size - 1 : 
            self.y = 0
			
    def move(self, board):
        if board.board[self.x][self.y] == 0:  # 原来是白色0 
            # Step 1: 脚下格子设置为黑色1 
            board.board[self.x][self.y] = 1   
            # Step 2: 右转
            self.direction = (self.direction - 90) % 360
            # Step 3:爬行一格
            self.climb_one(board)
        else:   # 原来是黑色1 
            # Step 1: 脚下格子设置为白色0
            board.board[self.x][self.y] = 0
            # Step 2:左 转
            self.direction = (self.direction + 90) % 360
            # Step 3:爬行一格
            self.climb_one(board)
			
			

3.2 测试代码

def run():
    board = Board(250)       # 棋盘大小设置
    ant = Ant(board)
    
    for _ in range(1000000):   # 蚂蚁爬行次数
        ant.move(board)
    
    print("moving ......")
    board.display()

if __name__ == '__main__':
    run()
	
	

4 结果展示

4.1 蚂蚁初始方向头朝上,棋盘 100* 100 , 爬行 15000次

兰顿蚂蚁:从无序到有序的伟大征程

4.2 蚂蚁初始方向头朝上,棋盘 100* 100 , 爬行 1000次

兰顿蚂蚁:从无序到有序的伟大征程

4.3 蚂蚁初始方向头朝上,棋盘 1000* 1000 , 爬行 50000次

兰顿蚂蚁:从无序到有序的伟大征程

4.4 蚂蚁初始方向头朝右,棋盘 250* 250 , 爬行 50000次

兰顿蚂蚁:从无序到有序的伟大征程

4.5 蚂蚁初始方向头朝右,棋盘 250* 250 , 爬行 100W次

兰顿蚂蚁:从无序到有序的伟大征程文章来源地址https://www.toymoban.com/news/detail-855142.html

到了这里,关于兰顿蚂蚁:从无序到有序的伟大征程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python入门基础-数据类型&有序序列和无序序列;

    python语言:定义成能快速完成工作的小工具 • 简洁、优雅、灵活 • 入门非常简单,但真正精通较为困难 • python可以编写服务器脚本,也可以编写常规网站 • 运行效率慢(相对于c,java) • 编译型语言(C、C++) • 执行前必须先进行编译,编译成底层机器码 • python不适合

    2024年02月08日
    浏览(35)
  • #HTML列表学习指南 - 创建有序和无序列表增强网页内容

    HTML列表是网页设计中一项关键的元素,它们允许我们以有序或无序的方式呈现信息、数据或事项。在本详细指南中,我们将深入了解HTML中的列表,探讨有序列表和无序列表的创建方法,以及如何利用列表标签来增强网页内容的可读性和可视化效果。 HTML无序列表 无序列表基

    2024年02月09日
    浏览(40)
  • 数据分析之Logistic回归分析(二元逻辑回归、多元有序逻辑回归、多元无序逻辑回归)

    在研究X对于Y的影响时: 如果Y为定量数据,那么使用多元线性回归分析; 如果Y为定类数据,那么使用Logistic回归分析。 结合实际情况,可以将Logistic回归分析分为3类: 二元Logistic回归分析 多元有序Logistic回归分析 多元无序Logistic回归分析 Logistic回归分析用于研究X对Y的影响

    2024年03月13日
    浏览(65)
  • 不吹不黑 OpenHarmony会是一个伟大的操作系统吗

    大家好,我叫连志安,目前是OpenHarmony社区的一位开发者。 我在2020年华为的HDC上就开始接触OpenHarmony,至今1年多了。 在回答标题这个问题之前,我想起一句话,先有结论,再做论证。 结论是:我认为,OpenHarmony的整体目标是伟大的,它注定要成为一个伟大的操作系统! 回答

    2024年02月09日
    浏览(46)
  • 【数据结构】什么是堆,如何使用无序数组生成一个堆?

    堆(Heap)是计算机科学中一类特殊的数据结构的统称,堆 通常是一个可以被看做一棵完全二叉树的数组对象 。如果有一个关键码的集合K = { , , ,…, },把它的所有元素按完全二叉树的 顺序存储方式存储 在一个一维数组中 ,并满足: = 且 = ( = 且 = ) i = 0,1, 2…,则称为

    2024年02月06日
    浏览(35)
  • JS-Object无序问题

    在开发图表功能时,由于历史原因,后端返回的图表数据如下: 是对象类型,键为日期,值为日期和当天日期的值。在H5端、微信小程序端运行结果正常,结果到了百度小程序突然发现,这个值的顺序是混乱的,时间有时前面的日期在后面,后面的日期在前面(百度小程序id

    2024年02月08日
    浏览(29)
  • 2、有序链表的维护【问题描述】编写一个程序,根据从标准输入接收的指令来维护和操作排序的链表(C语言、java和Python分别实现)

    【问题描述】 编写一个程序,根据从标准输入接收的指令来维护和操作排序的链表。链表是按顺 序维护的,这意味着链表中的数据在每次操作后都以递增的数字顺序存储。 请注意,在创建新节点时,需要使用malloc为它们分配空间;一旦不再需要任何已 分配的空间,就应该使

    2024年02月09日
    浏览(44)
  • 将两个递增的有序链表合并为一个递增的有序链表

             要求结果链表仍使用原来两个链表的存储空间,不另外占用其他存储空间。表中不允许有重复的数据。   【算法思想】         要求利用现有的表中的结点空间建立新表,可通过更改结点的指针域来重新建立新的元素之间的线性关系。此题关键点在于:为保证

    2024年02月07日
    浏览(42)
  • 两个有序表合并成一个有序表最少与最多的比较次数

    在数据结构(严蔚敏)第二章课后习题中有这样一个题,关于把两个有序表合并的操作比较次数 将两个各有 N 个元素的有序表归并成一个有序表,其最少的比较次数是( A )。 A.N B.2N -1 C.2N D.N -1 显然,比如A顺序表的最大值如果比B顺序表的最小值还要小,只需要拿B的最

    2024年02月10日
    浏览(44)
  • 将两个递增的有序链表合并为一个递增的有序链表.【数据结构】【线性表】

    编写一个函数完成如下功能:将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来的链表空间,不另外占用其他的存储空间。表中不允许有重复的数据。 要求,在主函数中调用上面的函数测试。 提示:还需要定义其他函数,比如初始化链表,构造单

    2024年02月06日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包