spfa求助,90pts
查看原帖
spfa求助,90pts
918602
C_096251楼主2023/10/4 06:59
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e4+10;
const int maxm=5e5+10;
const int INF=1e7;
ll n,m,s,k,dis[maxn],head[maxn];
bool vis[maxn];
struct Edge{
	ll tot,next,w;
}edge[maxm];
void add(ll u,ll v,ll w){
	edge[++k].next=head[u];
	edge[k].tot=v;
	edge[k].w=w;
	head[u]=k;
}
queue<ll> q;
void spfa(){
	for(ll i=1;i<=n;i++){
		dis[i]=INF;
	}
	ll u,v;
	q.push(s);
	dis[s]=0;
	vis[s]=1;
	while(!q.empty()){
		u=q.front();
		q.pop();
		vis[u]=0;
		for(ll i=head[u];i;i=edge[i].next){
			v=edge[i].tot;
			if(dis[v]>dis[u]+edge[i].w){
				dis[v]=dis[u]+edge[i].w;
				if(!vis[v]){
					vis[v]=1;
					q.push(v);
				}
			}
		}
	}
	
}
int main(){
	cin>>n>>m>>s;
	for(ll i=1;i<=m;i++){
		ll u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
	} 
	spfa();
	for(ll i=1;i<=n;i++){
		cout<<dis[i]<<" ";
	}
	
	return 0;
}


2023/10/4 06:59
加载中...