當我們邊的權重只有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';