能帮忙看一下宽搜spfa哪里有问题吗?
查看原帖
能帮忙看一下宽搜spfa哪里有问题吗?
964721
syDuck楼主2023/8/20 17:58
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
queue<int> q,p;
vector<int> v[500010],g[500010];
int n,m,s,x,y,z,i,mi,j,f[10010];
int main(){
	scanf("%d%d%d",&n,&m,&s);
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&z);
		v[x].push_back(y);
		v[y].push_back(x);
		g[x].push_back(z);
		g[y].push_back(z);
	}
	for(i=1;i<=n;i++){
		while(!q.empty()) q.pop();
		while(!p.empty()) p.pop();
		mi=1e9;
		if(i==s){
			printf("0 ");
			continue;
		}
		memset(f,0,sizeof(f));
		q.push(i);p.push(0);
		while(!q.empty()){
			x=q.front();y=p.front();
			f[x]=1; 
			for(j=0;j<v[x].size();j++){
				if(f[v[x][j]]==0){
					q.push(v[x][j]);p.push(y+g[x][j]);
					if(v[x][j]==s){
						mi=min(mi,y+g[x][j]);
					}
				}
			}
			q.pop();p.pop();
		}
		if(mi==1e9){
			printf("%d ",2<<31-1);
		} 
		printf("%d ",mi);
	}
	return 0;
}
/*
7
1 4 9644
2 5 15004
3 1 14635
5 3 9684
1 6 1234
6 7 1234
*/
2023/8/20 17:58
加载中...