迪杰斯特拉0分求助
查看原帖
迪杰斯特拉0分求助
931394
zjy102512楼主2024/6/13 00:20
#include<queue>
#include<cstring>
using namespace std;
#define ll long long
struct edge
{
	int to,w,next;
};
edge e[500005];
int head[10005];
int cnt=0;
struct node
{
	int d,l;
	bool operator < (const node & a) const
	{
		return l<a.l;
	}
};
void ad(int u,int v, int w)
{
	e[cnt].to=v;
	e[cnt].w=w;
	e[cnt].next=head[u];
	head[u]=cnt;
	cnt++;
}
priority_queue<node>q;
int main()
{
	memset(head,-1,sizeof(head));
	int n,m,s;
	cin>>n>>m>>s;
	int u,v,w;
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v>>w;
		ad(u,v,w);
	}
	int dis[10005];
	bool vis[10005];
	memset(dis,0x7f,sizeof(dis));
	dis[s]=0;
	q.push(node{s,0});
	node tmp;
	while(!q.empty())
	{
		tmp=q.top();
		q.pop();
		int u=tmp.d;
		if(vis[u])
		{
			continue;
		}
		vis[u]=1;
		dis[u]=tmp.l;
		for(int i=head[u],v,w;i>=-2;i=e[i].next)
		{
			v=e[i].to;
			w=e[i].w;
			if(dis[v]>dis[u]+w)
			{
				dis[v]=dis[u]+w;
			//	cout<<dis[v]<<" "<<endl;
				q.push(node{v,dis[v]});
			}
			if(i==-1)
			{
				break;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		cout<<dis[i]<<" ";
	}
	return 0;
}
2024/6/13 00:20
加载中...