给定一个n个顶点和m条边的无向图,每条边都有颜色,求从结点1到结点n的一条最短路,若有多条则取路径颜色序列字典序最小的那条。可能会有重边和自环。
链接
题解
这里每条边的权值都是一样的,可以求最短路的方式有 $BFS$,$SPFA$,$Dijkstra$ 等。但是这些方法都不能保证求得的最短路的字典序最小。可以先从节点n出发跑一次 $BFS$。这样再从节点1出发时可以按照各个结点已经标记好的距离,每次到达一个新结点时保证d值恰好减1,直到到达终点。
按照上述规则从起点出发,优先选择颜色字典序最小的走,若多条边的颜色字典序都最小则记录所有这些边的终点,下一步时考虑从所有这些点出发的边。
代码
1 | /* |