蜂巢题目本身难度并不大,使用枚举方法就可以求解,但在编程中还是有坑的(文末最后提到)。解题思路:
1.先把蜂巢坐标系(d, p, q)转换为直角坐标系(x, y),不妨把正六边形中心到各边的距离记作1.
则沿6各方向移动一步的坐标变换是:
direction = [(-2, 0), (-1, a), (1, a), (2, 0), (1, -a), (-1, -a)],其中a=math.sqrt(3)
所以有坐标转换公式:
x = direction[d][0]*p + direction[(d+2)%6][0]*q y = direction[d][1]*p + direction[(d+2)%6][1]*q
2.B(x1, y1)与C(x2, y2)的关系分为5种:
1)B、C在同一行:y1=y2
2)B在C的左上:y1>y2且x1<=x2
3)B在C的左下:y1<y2且x1<=x2
4)B在C的右上:y1>y2且x1>x2
5)B在C的右下:y1<y2且x1>x2
对情形1)最简单,沿方向0或3移动即可,移动步数:|x2-x1|//2
对情形2),先把B沿方向4移动到B‘,使得B’与C同行,再把B‘沿方向3移动到C;但如果B’到了C点右边,则会使得移动的步数不是最少,此时要先把B沿方向4移动到C点正上方的B‘,再把B’移动到C。
其它3种情况,类似情况2)。具体代码如下,视频讲解可见: 蜂巢_哔哩哔哩_bilibili
import math a = math.sqrt(3) direction = [(-2, 0), (-1, a), (1, a), (2, 0), (1, -a), (-1, -a)] def transform(d,p,q):

本文解析了如何通过编程解决蜂巢坐标系中的移动问题,介绍了坐标转换公式,并详细讲解了如何根据B,C两点关系计算最优步数,特别强调了取整对结果的影响。
最低0.47元/天 解锁文章
1371

被折叠的 条评论
为什么被折叠?



