兰顿蚂蚁, 是于 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
样例输入
- #include<iostream>
- using namespace std;
- char a[100][100];
- void walk(int &x, int &y, int dir)
- {
- switch(dir)
- {
- case 0:
- x--; break;
- case 1:
- y--; break;
- case 2:
- x++; break;
- case 3:
- y++; break;
- }
- }
- int main()
- {
- int m, n;
- int x, y, k;
- char s;
- while(cin>> m>> n)
- {
- for(int i = 0; i <m; i++)
- {
- for(int j = 0; j < n; j++)
- cin>> a[i][j];
- }
- cin>> x>> y>> s>> k;
- int dir;
- switch(s)
- {
- case U:
- dir = 0; break;
- case L:
- dir = 1; break;
- case D:
- dir = 2; break;
- case R: dir =3; break;
- }
- while(k--)
- {
- if(a[x][y] == 0)
- {
- dir = (dir + 4 + 1) % 4;
- a[x][y] = 1;
- }
- else
- {
- dir = (dir + 4 - 1) % 4;
- a[x][y] = 0;
- }
- walk(x, y, dir);
- }
- cout << x << " " << y << endl;
- }
- }
来源: http://www.bubuko.com/infodetail-2533575.html