算法提高之LeetCode刷题Advent of Code架构算法设计模式和编程理论

Advent of Code Day 11 六边形迷宫

2017-12-13  本文已影响5人  宅纸箱

解题语言不限Java

拖更了,不好意思

题目内容

Crossing the bridge, you've barely reached the other side of the stream when a program comes up to you, clearly in distress. "It's my child process," she says, "he's gotten lost in an infinite grid!"
当你快跨过桥的时候,你看见一个沮丧的程序走过来。“这是我孩子的路径”,她说,“他在这个无穷大的网格里迷路了”。
Fortunately for her, you have plenty of experience with infinite grids.
对她来说幸运的是,你对无穷网格很有经验。
Unfortunately for you, it's a hex grid.The hexagons ("hexes") in this grid are aligned such that adjacent hexes can be found to the north, northeast, southeast, south, southwest, and northwest:
对你来说不幸的是,这是个六边形网格(译者注:我把链接的网址换成百度了,方便各位没有梯子的同志们)。六边形在网格里对齐,并且可以向北,西北,西南,东北,东南移动。

  \ n  /
nw +--+ ne
  /    \
-+      +-
  \    /
sw +--+ se
  / s  \

You have the path the child process took. Starting where he started, you need to determine the fewest number of steps required to reach him. (A "step" means to move from the hex you are in to any adjacent hex.)
你有她孩子走过的路径,从当前位置开始,你需要去判断到达他所在位置的最短路径。
For example:

解题思路

这个题目是要求在原点到目标点的曼哈顿距离。不知道曼哈顿距离的朋友可以去看看曼哈顿距离
难点在于和直角坐标系相比,移动向量多了一,并且有移动向量之间是可以互相转换的。
比如说:
我用移动向量(x,y,z)来表示六边形网格中的位置。

那位置(-1,1,1)和位置(0,0,0)是一样的
但是在直角坐标系中(x,y)的组合是不会出现这样的问题。因为在二维平面。垂直的两个向量是不会互相影响的。
我在犯了这个错误之后借鉴了一下这个网站,这里面很详细的讲了各种方法来解这个问题。我会在整个活动结束之后出一个学习笔记来解析这个题目。

上一篇下一篇

猜你喜欢

热点阅读