spfa code:
void spfa(int s){
q.push(s);inq[s]=1;//标记加入队
while(!q.empty()){
int u=q.front();q.pop();
inq[u]=0;
for(int i=head[u];i;i=tu[i].next){
int v=tu[i].to;
if(dis[v]>dis[u]+tu[i].w){
dis[v]=dis[u]+tu[i].w;
if(!inq[v]){
inq[v]=1;q.push(v);
}
}
}
}
}
dij堆优化 code:
void dij(){
init();
q.push((edg){0,s});
while(!q.empty()){
edg hd=q.top();
q.pop();
int x,y;
x=hd.id;y=hd.ans;
if(inq[x]==1) continue;
else inq[x]=1;
for(int i=head[x];i!=0;i=tu[i].next){
int j=tu[i].to;
if(dis[j]>dis[x]+tu[i].w){
dis[j]=dis[x]+tu[i].w;
if(inq[j]==0){
q.push((edg){dis[j],j});
}
}
}
}
}
感觉没有区别,谁能解答一下嘛