DIJKSTRA 60 求调
查看原帖
DIJKSTRA 60 求调
764455
HAPPYspider楼主2023/6/3 10:53
#include<bits/stdc++.h>
using namespace std;

vector<pair<int,int> > e[10005];
long long dist[10005],vis[10005];
long long MAXN=pow(2,31)-1;
long long n,m,s;

void dijkstra(int begin){
	memset(dist,0x3f,sizeof(dist));
	memset(vis,0,sizeof(vis));
	dist[begin]=0;
	for(int k=1;k<n;k++){
		int u=0;
		for(int i=1;i<=n;i++){
			if(!vis[i]&&dist[i]<dist[u])u=i;
		}
		if(u==0)return;
		vis[u]=1;
		for(int i=0;i<e[u].size();i++){
			int v=e[u][i].first,c=e[u][i].second;
			if(!vis[v]&&dist[v]>dist[u]+c)dist[v]=dist[u]+c;
		}
	}
}

int main(){
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		int u,v,w;
        cin>>u>>v>>w;
        pair<int,int> p1(v,w);
        e[u].push_back(p1);
	}
	dijkstra(s);
	for(int i=1;i<=n;i++){
		if(dist[i]==0x3f)cout<<pow(2,31)-1<<" ";
		
		else cout<<dist[i]<<" ";
	}
	return 0;
}
2023/6/3 10:53
加载中...