论spfa和dij的区别
  • 板块学术版
  • 楼主JackHu0117
  • 当前回复13
  • 已保存回复13
  • 发布时间2023/9/29 21:16
  • 上次更新2023/11/2 17:15:10
查看原帖
论spfa和dij的区别
647952
JackHu0117楼主2023/9/29 21:16

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});
				}
			}
		}
	}
}

感觉没有区别,谁能解答一下嘛

2023/9/29 21:16
加载中...