首先发现一次滑冰产生的冰块不会重复利用,也不会对最短路产生阻碍,因为我们可以在第一次到达这个格子的时候就直接去要去的地方。
考虑怎么移动,到达另一个点:
- 移到相邻的格子,比方说移到右侧的格子,可以通过先往右滑再往左滑来实现,步数为 $2$。
- 滑到下一个冰块,步数为 $1$。
发现所有的状态都可以通过这两个移动方式转移过来,并且其他的移动方式是不优的。
于是考虑建出图来跑最短路,具体地,把每个点和其相邻的格子连一条边,边权为 $2$,和它能一步滑到的格子连一条边,边权为 $1$,跑一遍最短路就行了。
这样每个点最多有 $8$ 条出边,所以边数是 $O(n)$ 的。时间复杂度 $O(n\log n)$。