题目描述

兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。

平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。
蚂蚁的头部朝向为:上下左右其中一方。

蚂蚁的移动规则十分简单:
若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;
若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。

规则虽然简单,蚂蚁的行为却十分复杂。刚刚开始时留下的路线都会有接近对称,像是会重复,但不论起始状态如何,蚂蚁经过漫长的混乱活动后,会开辟出一条规则的“高速公路”。

蚂蚁的路线是很难事先预测的。

你的任务是根据初始状态,用计算机模拟兰顿蚂蚁在第n步行走后所处的位置。

输入
输入数据的第一行是 m n 两个整数(3 < m, n < 100),表示正方形格子的行数和列数。

接下来是 m 行数据。
每行数据为 n 个被空格分开的数字。0 表示白格,1 表示黑格。

接下来是一行数据:x y s k, 其中x y为整数,表示蚂蚁所在行号和列号(行号从上到下增长,列号从左到右增长,都是从0开始编号)。s 是一个大写字母,表示蚂蚁头的朝向,我们约定:上下左右分别用:UDLR表示。k 表示蚂蚁走的步数。

输出
输出数据为一个空格分开的整数 p q, 分别表示蚂蚁在k步后,所处格子的行号和列号。
样例输入
5 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 3 L 5
样例输出
1 3
……………………………………………………………………………………
看过题后感觉需要用到结构体、find函数来列出数据,所以考虑用C++来写,
题面上没有说明一些特殊情况,比如蚂蚁出界,或者初始坐标为负数这些情况,那我也就懒得考虑,直接写
提上没有其他要求,而且规则简单,只有方向和地图两个元素,直接照着画就行。

struct all //蚂蚁结构体初始化
{int x;int y;int d;all(int p = 0, int b = 0, int a = 0) :x(p), y(b), d(a) {}
};
string dic = "ULDR";//方向
int map[100][100];//初始化地图数组

蚂蚁结构体X,Y坐标和D方向 要给上默认值
方向的字母顺序要注意,后面使用 find 会很方便.

然后写输入输出函数

int main() {int m, n, k;char d;all a;cin >> m >> n;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {cin >> map[i][j];}}cin >> a.x >> a.y >> d >> k;a.d = dic.find(d);f(a, k);传入结构体a和步数kcout << a.x << " " << a.y;return 0;
}

然后写方法
通过输入方向字母,得到字母在方向元素中代表的数字
把上下左右用数字表示

然后判断坐标是0还是1,再进行加减
防止出现小于0或大于4的情况,所以用三元运算符表示出来

if (map[my.x][my.y] == 0){my.d == 3 ? my.d = 0 : my.d += 1;}else{my.d == 0 ? my.d = 3 : my.d -= 1;}

外层循环为步数 k–
switch列出不同方向的动作
注意经过的坐标要换颜色,
这道题就写好了

完整函数代码C++

#include<iostream>
#include<cstring>
using namespace std;struct all //蚂蚁结构体初始化
{int x;int y;int d;all(int p = 0, int b = 0, int a = 0) :x(p), y(b), d(a) {}
};
string dic = "ULDR";//方向
int map[100][100];//初始化数组
void f(all &my, int k)
{while (k--){if (map[my.x][my.y] == 0){my.d == 3 ? my.d = 0 : my.d += 1;}else{my.d == 0 ? my.d = 3 : my.d -= 1;}map[my.x][my.y] = !map[my.x][my.y];switch (my.d){case 0:my.x--;break;case 1:my.y--;break;case 2:my.x++;break;case 3:my.y++;break;}      }
}
int main() {int m, n, k;char d;all a;cin >> m >> n;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {cin >> map[i][j];}}cin >> a.x >> a.y >> d >> k;a.d = dic.find(d);f(a, k);cout << a.x << " " << a.y;return 0;
}

还可以找到规律,新建两个数组代表动作,能减少一些代码量。这里就不多展示了,可以自行研究一下。

兰顿蚂蚁算法题(C++写法详解)相关推荐

  1. [蓝桥杯][2014年第五届真题]兰顿蚂蚁(模拟)

    题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...

  2. [蓝桥杯][2014年第五届真题]兰顿蚂蚁-模拟

    题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...

  3. 第五届蓝桥杯 软件类省赛真题 第八题:兰顿蚂蚁

    标题:兰顿蚂蚁 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁".     蚂蚁的头部 ...

  4. 【菜鸟算题】兰顿蚂蚁

    题目 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左右其 ...

  5. [蓝桥杯][2014年第五届真题]兰顿蚂蚁

    时间限制: 1Sec 内存限制: 128MB 题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只" ...

  6. 历届试题 核桃的数量(3个数的最小公倍数),翻硬币(贪心),买不到的数目(在范围内暴力,找范围,最小公倍数是上界,最小的数是下界),兰顿蚂蚁(dfs,模拟)

    历届试题 核桃的数量 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 各组的核桃数量必须相同 各组内必须能 ...

  7. React 系列教程2:编写兰顿蚂蚁演示程序

    简介 最早接触兰顿蚂蚁是在做参数化的时候,那时候只感觉好奇,以为是很复杂的东西.因无意中看到生命游戏的 React 实现,所以希望通过兰顿蚂蚁的例子再学习一下 React. 兰顿蚂蚁的规则非常简单: ...

  8. 蓝桥杯-兰顿蚂蚁(python)

    题目 1429: 蓝桥杯2014年第五届真题-兰顿蚂蚁 时间限制: 1Sec 内存限制: 128MB 提交: 6100 解决: 2797 题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属 ...

  9. LQ0213 兰顿蚂蚁【模拟】

    题目来源:蓝桥杯2014初赛 Java A组H题 题目描述 兰顿蚂蚁,是于 1986 年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只& ...

最新文章

  1. Day01 你如何保持健康
  2. HashMap和Hashtable的区别总结
  3. 区块链数字广告项目-【DadxChain】
  4. Python 的装饰器执行顺序问题(二)
  5. 毛概 第二章新民主主义革命理论
  6. 【收藏干货】axios配置大全
  7. 计算机模拟技术在材料中的应用,浅谈计算机模拟技术在材料科学中的应用.doc...
  8. Python连接presto
  9. idea 内嵌浏览器 翻译
  10. PCL ——最小包围盒
  11. mac忘了密码怎么办_如果忘记Mac密码该怎么办
  12. 央视新闻同款 教你1分钟做出三维地球动画特效
  13. vue——一个页面实现音乐播放器
  14. mysql workbench6.3.7_mysql workbench官方版
  15. 堆及新生代老生代(学习笔记)
  16. 指标实现层级_有了指标怎么用层次分析法建立模型?
  17. 计算机应届博士生的一点求职经验——腾讯篇
  18. css 实现四个角加粗
  19. 在KindEditor中编辑可上传MP4
  20. 02-06 普通线性回归(波斯顿房价预测)+特征选择

热门文章

  1. OpenCv中,waitkey()函数失效原因
  2. 关于FPGA设计中的线性序列机和状态机
  3. python爬虫之Beautiful Soup库,基本使用以及提取页面信息
  4. Smartbi智分析一网打尽50种主流数据库:本地+SQL+NoSQL +多维
  5. Uipath社区版 2022 最新安装教程
  6. c语言运算符与表达式ppt,C语言基本运算符与表达式.ppt
  7. 哈夫曼编码解压缩文件 - Java实现
  8. 对羟基苯甲酸脂类混合物的反相HPLC实验
  9. python的for循环和for each循环遍历时改变变量的结果
  10. 网红张大奕订婚:未婚夫不是蒋凡 传是地产富二代