题目描述
给定一个 n n n 点 m m m 条有向边构成的图,并标记 k k k 个不同的点。
求出起点和终点都为标记点的最短路中的最小值。
注:起点和终点必须为不同的点。若某个起点不能到达某个终点,记它们两者之间的最短路长度为无穷大。
思路1
1.把二进制第1位为1的放进一个集合,为0的放进另一个集合,跑一边最短路。
2.把二进制第2位为1的放进一个集合,为0的放进另一个集合,跑一边最短路。
2.把二进制第3位为1的放进一个集合,为0的放进另一个集合,跑一边最短路。
……
思路2
1.求任意两点之间的最短路,相当于把它们分别连到一个起点和一个终点,求这个起点到终点的最短路。
2.有一个问题:
+ 如果起点和终点连接到了同一个点,那么答案永远是0。
+ 所以我们需要把起点的点和终点的点变成不同的点。
+ 解决方法:把终点连的点变成起点连的点+n,再判断一下点u到u+n是否经过其他的点,如果没有不能过去。
+
- 还有一个问题:
-
如果有环,那么还是会出错。
-
-
比如这个:它可以再3-1-3这样走一遍
-
解决方法:判断每一条路的出发点,必须下一个点和出发点不一样才能走。
差不多了。
-