编程问题 蜂族的旅行 要PASCAL程序代码

发布时间:2024-05-18 07:02 发布:上海旅游网

问题描述:

和其他昆虫不同,为了不至于迷路,蜜蜂在蜂巢(紧密连接的正六边形)中行走必须遵守一定的路线。把一个正方形的中心看作原点。如果一只蜜蜂要从A(x1,y1)点飞到B(x2,y2)点,且AB不在同一六边形的话,那么它必须按照蜂族的飞行规则,首先飞到包含A点的正六边形的中心,然后每次都只能从一个正六边形的中心飞到和它相邻的六边形中心,直到它飞到包含B点的正六边形的中心为止,然后再飞往B点。

知道正六边形的边长d与A、B点的坐标,算出蜜蜂的飞行距离。(A、B都不会刚好落在某个六边形的边上)。

要源代码 pascal

问题解答:

大概看了一下,好像有思路,不想写程序了,思路如下,应该有所帮助的:
一点点分析:
其实本题的本质就是要你找出两个点所在的六边形,然后计算其最短相邻路径
首先,从仅从横坐标考虑
假设r=abs(x1-x2),稍加画图分析,即可得出如下规律:
两点横坐标上相隔1列六边形:d<r<5d
两点横坐标上相隔2列六边形:(5/2)d<r<(13/2)d
两点横坐标上相隔3列六边形:4d<r<8d
两点横坐标上相隔4列六边形:(13/2)d<r<(21/2)d
……
若不明白可自行画图考虑

然后,发现一个问题,即上述所得出的规律存在交集,即一个r可能会有两种可能存在:既可能相邻两列六边形、也可能相邻一列六边形,所以要再对相应的情况从纵坐标相隔的六边形行数考虑。
看似复杂,不过楼主放心,一定存在规律性的。

本题的思考过程稍显复杂,但是程序写出来应该不复杂。
分数不敢奢求,有帮助就好,探讨交流问题吧。

如有疑问可与我交流:shipeioi@126.com

askjflasl;fjaf

热点新闻