SPFA在求最短路时不是万能的。在稠密图时用堆优化的dijkstra更加高效:
1 typedef pair<int,int> pii; 2 priority_queue<pii, vector<pii>, greater<pii> > q 3 void dijkstra(){ 4 memset(dis,10,sizeof(dis)); 5 memset(vis,0,sizeof(vis)); 6 dis[K]=0; 7 q.push(make_pair(dis[K],K)); 8 while(!q.empty()){ 9 pii tmp=q.top();q.pop(); 10 int node=tmp.second; 11 if(vis[node])continue; 12 vis[node]=1; 13 for(int i=LINK[node];i;i=e[i].next) 14 if(dis[e[i].y]>dis[node]+e[i].v){ 15 dis[e[i].y]=dis[node]+e[i].v; 16 q.push(make_pair(dis[e[i].y],e[i].y)); 17 } 18 } 19 }
时间: 2024-10-10 16:05:33