SPFA求助dalao,20分
查看原帖
SPFA求助dalao,20分
367636
kyline楼主2020/12/20 16:35
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define Max 2147483647
int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+(ch-'0');
		ch=getchar();
	}
	return x*f;
}
struct node{
	int start;
	int end;
	int value;
};
node edge[500005];
int head[500005],next[500005];
int dist[10005],v[10005];
int N,M,K;
queue<int> x;
void SPFA(){
	memset(v,0,sizeof(v));
	for(int i=1;i<=N;i++){
		dist[i]=Max;
	}
	dist[K]=0;
	x.push(K);
	v[K]=1;
	while(x.size()!=0){
		int y=x.front();
		x.pop();
		for(int i=head[y];i;i=next[i]){
			int end=edge[i].end,value=edge[i].value;
			if(dist[end]>dist[y]+value){
				dist[end]=dist[y]+value;
				if(v[end]==0){
					x.push(end);
					v[end]=1;
				}
			}
		}
	}
}
int main(){
	N=read();
	M=read();
	K=read();
	for(int i=1;i<=M;i++){
		edge[i].start=read();
		edge[i].end=read();
		edge[i].value=read();
		next[i]=head[edge[i].start];
		head[edge[i].start]=i;
	}
	SPFA();
	for(int i=1;i<=N;i++){
		printf("%d ",dist[i]);
	}
	return 0;
}

2020/12/20 16:35
加载中...