题意简述
n n n 行 n n n 列的矩阵上,只有 m m m 个“关键点”处(在第 x x x 行 y y y 列)才能拐弯。从格子到上下左右四个相邻格子花费 2 2 2,转弯花费 1 1 1。 求从某个位置走到另一个位置的最小花费。无解输出 − 1 -1 −1。
思路
新建两个点 S S S 和 T T T 表示起点。 然后把所有点 A A A(包括关键点和 S , T S,T S,T) 拆成两个点 A 1 A_1 A1 和 A 2 A_2 A2,分别表示横向跑和纵向跑。
对于所有关键点 K K K (不包括 S , T S,T S,T), K 1 K_1 K1 到 K 2 K_2 K2 连一条边权为 1 1 1 的无向边,表示换乘。
然后对于所有同一行 ( x x x 相同)的点,按照列号 y y y 排序。对于相邻的 A , B A,B A,B,连边 ( A 1 , B 1 , 2 × d i s ) (A_1,B_1,2\times dis) (A