observation
阶分形的第一列、最后一列、第一行、最后一行都是白色的格子。
lemma
对于一个 阶分形,从其中的任意一个点走到这个分形的右下角的最短路长度为这两个点的曼哈顿距离。
证明:考虑归纳,对于 显然成立;当结论对于 成立时,构造 阶分形中的行走方案:先走到点所属的 阶分形的右下角,然后沿着其它 阶分形的边缘走过去即可。
solution
将当前的图分为八个部分:
1 | A B C |
如果两个点不在同一行或者同一列,那么它们之间的最短路就是它们之间的曼哈顿距离(与 lemma 证明类似构造)。
如果两个点都在 B x G
这一列或者都在 D x E
这一行(以 B x G
为例):最短路径要么是(起点 -> B 的左下角 -> G 的左上角 -> 终点),要么是(起点 -> B 的右下角 -> G 的右上角 -> 终点)。可以直接算出来。
否则两个点在同一行或者同一列,并且之间全部是 阶分形。递归下去做即可。
为了减少讨论量,可以在初始的时候令点的横坐标绝对值之差大于纵坐标绝对值之差。