萌新求调SPFA
查看原帖
萌新求调SPFA
379982
hiding_in_the_blue楼主2021/11/18 20:37

问题大概出在更新节点入队后再循环出队的时候无法进行正确的松弛操作

void spfa(int root){
	memset(dis,999999,sizeof(dis));
	queue<int>td;
	bool flag[10050];
	memset(flag,false,sizeof(flag));
	flag[root]=true;
	td.push(root);
	dis[root]=0;
	while(!td.empty()){
		int x=td.front();
		td.pop();
		flag[x]=false;
		//cout<<x<<endl;
		for(int i=1;i<=m;i++){
			if(qwq[i].f==x){
				int a=qwq[i].t;
				cout<<"link"<<x<<","<<a<<endl;
				//加入更新队列
				if(flag[a]==false){
					td.push(a);
					flag[a]=true;
				}
				//松弛
				dis[a]=min(dis[a],dis[x]+qwq[i].val);
			}
		}
	}
}
2021/11/18 20:37
加载中...