蓝桥杯-兰顿蚂蚁
2016-03-18 17:18
190 查看
历届试题 兰顿蚂蚁
时间限制:1.0s 内存限制:256.0MB
问题描述
![](http://lx.lanqiao.org/RequireFile.do?fid=YJrfYLeN)
兰顿蚂蚁,是于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
样例输入
3 3
0 0 0
1 1 1
1 1 1
1 1 U 6
样例输出
0 0
代码:
时间限制:1.0s 内存限制:256.0MB
问题描述
兰顿蚂蚁,是于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
样例输入
3 3
0 0 0
1 1 1
1 1 1
1 1 U 6
样例输出
0 0
代码:
#include<iostream> using namespace std; int map[105][105] = { 0 }; //4表示上下左右四个方向,第一个2表示左转、右转,第二个2表示x, y需要移动的坐标 int dis[4][2][2] = { 0, -1, 0, 1, 0, 1, 0, -1, 1, 0, -1, 0, -1, 0, 1, 0 }; //4表示上下左右四个方向,2表示左转、右转,该数组表示,当头在哪个方向左转或右转后头朝哪个方向 int tf[4][2] = { 2, 3, 3, 2, 1, 0, 0, 1 }; int main() { int m, n; cin >> m >> n; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { cin >> map[i][j]; } } int x, y, k, d, df; char f; cin >> x >> y >> f >> k; //头方向 switch (f) { case 'U': d = 0; break; case 'D': d = 1; break; case 'L': d = 2; break; case 'R': d = 3; break; } while (k--) { //判断该向左还是向右 if (map[x][y] == 0) { df = 0; } else { df = 1; } //改变该格子颜色 map[x][y] = !df; //蚂蚁移动 x += dis[d][df][0]; y += dis[d][df][1]; //改变移动后的头朝向 d = tf[d][df]; } cout << x << " " << y << endl; return 0; }
相关文章推荐
- 新手学习记录3:makefile学习实践--自动变量引入
- iOS之百度地图获取地理位置名称
- php开发memcached
- 函数调用机制2
- Java有了GC同样会出现内存泄露问题
- Giraph集群测试Pagerank
- 【字符串处理算法】删除特定的字符的算法设计及C代码实现
- SQL Server 2008 分区函数和分区表详解
- docker 数据管理<1>
- Gen_server 和 gen_server2
- 问题的总结
- ios7内购、Game Center 实现 in-App Purchases & Game Center
- 采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序(多activity)
- 关于iOS`UITableView`中cell多选 全选自定义问题
- Hibernate之总结
- 函数调用机制
- weblogic 清理缓存
- docker 数据管理<1>
- docker 数据管理<1>
- mysql5.5更换配置文件my.ini后无法登录