兰顿蚂蚁算法题(C++写法详解)
题目描述
兰顿蚂蚁,是于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++写法详解)相关推荐
- [蓝桥杯][2014年第五届真题]兰顿蚂蚁(模拟)
题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...
- [蓝桥杯][2014年第五届真题]兰顿蚂蚁-模拟
题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左 ...
- 第五届蓝桥杯 软件类省赛真题 第八题:兰顿蚂蚁
标题:兰顿蚂蚁 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部 ...
- 【菜鸟算题】兰顿蚂蚁
题目 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左右其 ...
- [蓝桥杯][2014年第五届真题]兰顿蚂蚁
时间限制: 1Sec 内存限制: 128MB 题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只" ...
- 历届试题 核桃的数量(3个数的最小公倍数),翻硬币(贪心),买不到的数目(在范围内暴力,找范围,最小公倍数是上界,最小的数是下界),兰顿蚂蚁(dfs,模拟)
历届试题 核桃的数量 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: 各组的核桃数量必须相同 各组内必须能 ...
- React 系列教程2:编写兰顿蚂蚁演示程序
简介 最早接触兰顿蚂蚁是在做参数化的时候,那时候只感觉好奇,以为是很复杂的东西.因无意中看到生命游戏的 React 实现,所以希望通过兰顿蚂蚁的例子再学习一下 React. 兰顿蚂蚁的规则非常简单: ...
- 蓝桥杯-兰顿蚂蚁(python)
题目 1429: 蓝桥杯2014年第五届真题-兰顿蚂蚁 时间限制: 1Sec 内存限制: 128MB 提交: 6100 解决: 2797 题目描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属 ...
- LQ0213 兰顿蚂蚁【模拟】
题目来源:蓝桥杯2014初赛 Java A组H题 题目描述 兰顿蚂蚁,是于 1986 年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只& ...
最新文章
- Day01 你如何保持健康
- HashMap和Hashtable的区别总结
- 区块链数字广告项目-【DadxChain】
- Python 的装饰器执行顺序问题(二)
- 毛概 第二章新民主主义革命理论
- 【收藏干货】axios配置大全
- 计算机模拟技术在材料中的应用,浅谈计算机模拟技术在材料科学中的应用.doc...
- Python连接presto
- idea 内嵌浏览器 翻译
- PCL ——最小包围盒
- mac忘了密码怎么办_如果忘记Mac密码该怎么办
- 央视新闻同款 教你1分钟做出三维地球动画特效
- vue——一个页面实现音乐播放器
- mysql workbench6.3.7_mysql workbench官方版
- 堆及新生代老生代(学习笔记)
- 指标实现层级_有了指标怎么用层次分析法建立模型?
- 计算机应届博士生的一点求职经验——腾讯篇
- css 实现四个角加粗
- 在KindEditor中编辑可上传MP4
- 02-06 普通线性回归(波斯顿房价预测)+特征选择
热门文章
- OpenCv中,waitkey()函数失效原因
- 关于FPGA设计中的线性序列机和状态机
- python爬虫之Beautiful Soup库,基本使用以及提取页面信息
- Smartbi智分析一网打尽50种主流数据库:本地+SQL+NoSQL +多维
- Uipath社区版 2022 最新安装教程
- c语言运算符与表达式ppt,C语言基本运算符与表达式.ppt
- 哈夫曼编码解压缩文件 - Java实现
- 对羟基苯甲酸脂类混合物的反相HPLC实验
- python的for循环和for each循环遍历时改变变量的结果
- 网红张大奕订婚:未婚夫不是蒋凡 传是地产富二代