我使用存储数字对的优先级队列编写了一个稍微修改过的Dijkstra算法。 当我宣布它为
时 priority_queue < pair<int,int> > Q;
priority_queue < pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>> > Q;
它的速度应该是12毫秒。
算法的代码如下
void dijkstra(int inode){
for(int i=1;i<=n;++i)dp[inode][i]=inf;
Q.push({0,v[inode]});
dp[inode][v[inode]]=0;
while(!Q.empty()){
int node=Q.top().second;
int dist=Q.top().first;
Q.pop();
if(dp[inode][node]<dist)continue;
for(auto edge: G[node]){
if(dp[inode][edge.first]>dist+edge.second){
dp[inode][edge.first]=dist+edge.second;
Q.push({dp[inode][edge.first],edge.first});
}
}
}
}
我缺少什么?这种差异来自哪里?