01BFS

當我們邊的權重只有0跟1時,可以利用01BFS演算法的精隨來減少時間複雜度,因為Dijkstra是利用priority_queue來實做,但01BFS只需要deque就好了,原因如下:

因為權重只有0跟1,所以不需要priority_queue的Log來排序,只需要自己判斷邊權重是0或1再往前塞或往後塞就好了。

for(int i=1;i<=N;i++) dis[i]=inf; deque<int> q; q.push_front(s); dis[s]=0; while(!q.empty()){ int now=q.front();q.pop_front(); for(auto i:Graph[now]){ if(dis[now]+i.S<dis[i.F]){ dis[i.F]=dis[now]+i.S; if(i.S) q.push_back(i.F); //if weight = 1 else q.push_front(i.F); //if weight = 0 } } } cout << dis[e] << '\n';