蜂窝上量距离

cxjddd 2002-01-09 12:35:53
最早是从《电脑报》上知道这个问题的,题目的大意是:将一个蜂窝编上号:以一个孔为中心,编为1号;再设立六个方向,并按顺时针方向一层一层地编号。
g h i
f 6 7 j
e 5 1 2 8
d 4 3 9
c b a
其中a~j分别代表10~19。
以“1-2-8”为第一个方向;“1-3-10”(“1-3-a”)为第二个方向;……以“1-7-i”(“1-7-18”)为第六个方向。
1为中心。以“1”为第一层,“2-3-4-5-6-7”为第二层,“8-9-10-11-12-13-14-15-16-17-18-19”为第三层……。

编号之后,给你两个号码,计算出它们之间的距离(一格一格走的距离)。例如,1到2 的距离是1;1到16(g)的距离是2;1到15(f)的距离是2;14(e)到8的距离是4;14(e)到3 的距离是3……。


《电脑报》上给出了一个解法,但是我认为那个解法较为复杂,我也没有每一个语句地去分析。在大学的军训期间,我找到了一个更好的方法。

我认为,蜂窝是一个平面的图形,应该可以用二维的坐标系来表示。从下面的图形中,可以看出来,其实用错位的方格正好可以表示方位:
■■■
■67■
■512■
■43■
■■■

ghi
f67j
e5128
d439
cba
●●●
●●●●
●●●●●
●●●●
●●●
事实上,可以取“1-2-8”和“1-6-16”(“1-6-g”)两个方向为正方向,即x,y两个方向。于是,“1-7-18”(“1-7-i”)可以由x,y两个方向。
以1为中心,建立平面坐标系,取“1-2-8”方向为x的正方向,取“1-6-16”为y方向。可知“1”的坐标为(0,0),“2”的坐标为(1,0),“6”的坐标为(0,1),“7”的坐标为(1,1),“3”的坐标为(0,-1)……。

知道各个孔的坐标之后,就可以求出其到“1”的距离。对于在坐标轴上的、以及第一、第三象限的孔,其到“1”的距离就是max{abs(x),abs(y)};而位于第二和第四象限的孔,其距离就是 abs(x)+abs(y)。可见,如果是某点到“1”的距离,是非常容易求的。
由于平面坐标具有相对性,所以,可以将任意的两个孔的坐标转化为“1”与某个其它的孔的距离。只需将两孔的坐标相减,再把得到的结果当成以个新的坐标,求出它到“1”的距离,即是原来两孔的距离。
...全文
145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
starfish 2002-01-14
  • 打赏
  • 举报
回复
当然不能用普通的公式了
只要变换坐标系(建立一个非直角坐标系),然后略作推导就可以了
cxjddd 2002-01-12
  • 打赏
  • 举报
回复
这个蜂窝并不能用普通的距离公式来算。蜂窝毕竟不同于平面坐标系。
wanbaocheng 2002-01-12
  • 打赏
  • 举报
回复
有同感,21分得的侥幸,谢谢!
cxjddd 2002-01-09
  • 打赏
  • 举报
回复
还是有点问题。
cxjddd 2002-01-09
  • 打赏
  • 举报
回复
- ■■■
- ■67■
-■512■
- ■43■
- ■■■
- →
- ghi ◎◎◎
- f67j  ◎◎◎◎
-e5128 ◎◎◎◎◎
-d439 ◎◎◎◎
-c ba ◎◎◎

Y

-  ◎◎◎
- ◎◎◎◎
-◎◎◎◎◎ →x
-◎◎◎◎
-◎◎◎
cxjddd 2002-01-09
  • 打赏
  • 举报
回复
◇◇◎◎◎
◇ ◎◎◎◎
◇◎◎◎◎◎
◇ ◎◎◎◎
◇◇◎◎◎
我的蜂窝全乱了。
wanbaocheng 2002-01-09
  • 打赏
  • 举报
回复
有时《电脑报》评出的优胜者的算法并非最好,真是不公平。
starfish 2002-01-09
  • 打赏
  • 举报
回复
楼上的,你到底要说明什么?是告诉别人你找到了一个好算法吗?还是你遇到了什么问题没办法解决?我看你好像发了很多帖子关于这个问题的了。

BTW: 其实你的这个算法也没什么,对于这个问题,很容易看出可以根据公式计算出任意两点的距离,我不知道电脑报上是如何解的,但你的解法并无特殊之处。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧