Dijkstra 90pts求助
查看原帖
Dijkstra 90pts求助
704634
poor_OIer楼主2024/7/6 23:39
#include<bits/stdc++.h>
using namespace std;
int n,m,s;
int edges;
struct Edge{
	int next;
	int weight;
	int to;
}edge[500005];
int head[10005];
int dis[10005],vis[10005];
void add_Edge(int u,int v,int w)
{
	edges++;
	edge[edges].to=v;
	edge[edges].weight=w;
	edge[edges].next=head[u];
	head[u]=edges;
}
int main()
{
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		add_Edge(u,v,w);
	}
	for(int i=1;i<=n;i++)
		dis[i]=0x7fffffff;
	dis[s]=0;
	int pos=s;
	while(!vis[pos])
	{
		long long minn=0x7fffffff;
		vis[pos]=1;
		for(int i=head[pos];i;i=edge[i].next)
			if(!vis[edge[i].to]&&dis[edge[i].to]>dis[pos]+edge[i].weight)
				dis[edge[i].to]=dis[pos]+edge[i].weight;
		for(int i=1;i<=n;i++)
			if(!vis[i]&&dis[i]<minn)
				minn=dis[i],pos=i;
	}
	for(int i=1;i<=n;i++)
		cout<<dis[i]<<' ';
	return 0;
} 
2024/7/6 23:39
加载中...