SPFA玄关求调
查看原帖
SPFA玄关求调
1038686
GB2312楼主2024/9/15 09:40

rt

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=10005;
const int inf=1e18;
int n,m,i,u,v,w,s,dis[N];
bool vis[N];
vector<int> e[N];
vector<int> val[N];
queue<int> q;
void add(int u,int v,int w)
{
	e[u].push_back(v);
	val[u].push_back(w);
}
void init()
{
	for(i=1;i<=n;i++) dis[i]=inf;
	dis[s]=0;
	q.push(s);
}
void spfa()
{
	init();
	while(!q.empty())
	{
		u=q.front();
		q.pop();
		vis[u]=1;
		for(i=0;i<e[u].size();i++)
		{
			v=e[u][i],w=val[u][i];
			if(dis[v]>dis[u]+w)
			{
				dis[v]=dis[u]+w;
				if(!vis[v])
				{
					vis[v]=1;
					q.push(v);
				}
			}
		}
	}
}
signed main()
{
	cin>>n>>m>>s;
	for(i=1;i<=m;i++)
	{
		cin>>u>>v>>w;
		add(u,v,w);
	}
	spfa();
	for(i=1;i<=n;i++)
	{
		if(dis[i]>=inf) dis[i]=(long long)(1<<31)-1;
		cout<<dis[i]<<' ';
	}
	return 0;
}
2024/9/15 09:40
加载中...