题意:给定一个n个顶点m条边的无向图,图中可能有多重边和自环。求顶点1到顶点n最少需要经过的边数,并且输出字典序最小的边的颜色序列。
从顶点1到顶点n的最少边数可以通过BFS求得,关键是字典序最小的颜色序列。想到的做法是,从顶点n到顶点1进行BFS,得到每个顶点与顶点n的距离。之后,想象按照距离把图分层,然后从顶点1开始,每往下走一层,都选择颜色值最小的边。
若是从顶点1到顶点n进行BFS,之后再按照到顶点1的距离分层,在往下一层走时,假设某条边e(u,v)的颜色值最小,我们选择了边e,但是顶点v到顶点n可能需要(比最少边数)更多的边数!
一个坑:因为图中存在多重边,假设我们从顶点u往下一层走时,选择的最小颜色值与边e(u,v)相同,且有3000条颜色值相同的边e(u,v),那么结点v要入队(这里使用队列维护)3000次!因此,需要保证入队一次,不然空间和时间都会爆炸😄。
1 |
|