博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
兰顿蚂蚁
阅读量:5806 次
发布时间:2019-06-18

本文共 1962 字,大约阅读时间需要 6 分钟。

问题描述

  兰顿蚂蚁,是于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

Algorithm

题目一上来就看见一个:细胞自动机,让我想到了以前用过的有限自动机

但是最终我决定我的算法的还是这句话:

因为难以预测,所以最好的算法就是模拟,我没有了解过是否有数学公式可以描述,百度百科是这样讲的:

这里我使用递归进行模拟。


 

AC

1 /* 2 * 目前来看是一个模拟的题目...  3 */ 4 #include
5 #include
6 #include
7 #include
8 9 using namespace std;10 11 int m, n, x, y, k;12 char s;13 int a[101][101];14 char w[4] = {
'U', 'R', 'D', 'L'};15 map
lr;16 17 void move(int x, int y, char s, int k)18 { 19 if(k == 0){20 cout<
<<" "<
<<'\n';21 return;22 }23 if(a[x][y]){ // 黑 24 s = w[(lr[s]+1)%4];25 a[x][y] = 0;26 }27 else{28 s = (lr[s] == 0)?'L':w[(lr[s]-1)%4];29 a[x][y] = 1;30 }31 switch(s)32 {33 case 'U':move(x-1, y, s, --k);break;34 case 'D':move(x+1, y, s, --k);break;35 case 'L':move(x, y-1, s, --k);break;36 case 'R':move(x, y+1, s, --k);break;37 default:break;38 }39 return;40 }41 42 int main()43 {44 lr['U'] = 0; lr['R'] = 1;45 lr['D'] = 2; lr['L'] = 3;46 m = n = 0;47 while(cin>>m>>n)48 {49 memset(a, 0, sizeof(a));50 for(int i=0;i
>a[i][j];53 }54 k = x = y = 0;55 cin>>x>>y>>s>>k;56 move(x, y, s, k);57 }58 59 return 0;60 }
View Code

2019-02-09

19:07:35

转载于:https://www.cnblogs.com/mabeyTang/p/10357858.html

你可能感兴趣的文章
安卓软件远程连接ConnectBot v1.8.6
查看>>
C++11 新特性
查看>>
给软件工程师的自学建议
查看>>
JavaScript之基础-3 JavaScript 数据类型、数据类型转换
查看>>
Spring中factory-method的使用
查看>>
linux awk之gensub()函数详解
查看>>
ceph PG故障排除
查看>>
我的友情链接
查看>>
python时间日期方法汇总
查看>>
(三)AJAX基本介绍和简单实例03-----Ajax与数据库的动态应用
查看>>
竟然屏蔽支付宝
查看>>
常用推荐算法
查看>>
Cocos2d-x游戏实例-《跑跑跑》制作教程(第六篇)——添加障碍物
查看>>
自定义ZXing二维码扫描界面并解决取景框拉伸等问题
查看>>
Jaxb2 实现JavaBean与xml互转
查看>>
ubuntu五笔死机
查看>>
android httpClient 支持HTTPS的2种处理方式
查看>>
Win7开启Telnet客户端
查看>>
php输出数据库结构表
查看>>
常用SQL语言概述(DDL、DML、DQL)
查看>>