求助
查看原帖
求助
1127126
yueyan_WZF楼主2023/12/23 10:33
#include<bits/stdc++.h>
using namespace std;
struct e1{
	int to,nxt,w;
}e[6000600];
long long n,m,s; 
long long dis[6000020],vis[6000050],h[6000500],cnt=0;
void add(int x,int y,int z){
	cnt++;
	e[cnt].nxt=h[x]; 
	e[cnt].to=y;	
	e[cnt].w=z;
	h[x]=cnt;

}
void spfa(int x){
	for(int i=1;i<=n;i++){
		dis[i]=1e5; 
		vis[i]=0;
	}
	dis[s]=0; //起点到起点为0;
	vis[s]=1;
	//vis表示s还在队列中 
	queue<int> p;
	p.push(s); 
	while(!p.empty()){
		int x=p.front();
		vis[x]=0;
		p.pop();
		for(int i=h[x];i;i=e[i].nxt){
			
			if(dis[e[i].to]>dis[x]+e[i].w){
				dis[e[i].to]=dis[x]+e[i].w;
				if(!vis[e[i].to]){
					vis[e[i].to]=1;
					p.push(e[i].to);
				}
			}
		}
	}
}

int main(){
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		int u,v,w;
		scanf("%d%d%d",&u,&v,&w);
		add(u,v,w);
	}
	spfa(s);
	for(int i=1;i<=n;i++){
		printf("%lld ",dis[i]);
	}
	return 0;
}

样例过了,但一分不得

2023/12/23 10:33
加载中...