求助
查看原帖
求助
997325
lch1218楼主2024/8/2 14:56

20分求调

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s,maxn,j;
int a[1001][1001];
int u,v,w;
int dis[1001];
bool vis[1001];
signed main(){
	cin>>n>>m>>s;
	for(int i=1;i<=n;i++){
		a[i][i]=0;
		dis[i]=1e10;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i!=j)	a[i][j]=1e10;
		}
	}
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		a[u][v]=min(a[u][v],w);
		//a[v][u]=w (无向图添加)
	}
	vis[s]=1;
	dis[s]=0;
	for(int i=1;i<=n;i++){
		dis[i]=a[s][i];
	}
	for(int i=1;i<=n-1;i++){
		maxn=1e18;
		for(int k=1;k<=n;k++){
			if(vis[k]==0){
				if(dis[k]<maxn){
					maxn=dis[k];
					j=k;
				}
			}
		}
		for(int k=1;k<=n;k++){
			if(a[s][j]+a[j][k]<dis[k]){
				dis[k]=a[s][j]+a[j][k];
			}
		}
		vis[j]=1;
	}
	for(int i=1;i<=n;i++){
		if(dis[i]==1e10){
			cout<<2147483647<<' ';
		}
		else	cout<<dis[i]<<' ';
	}
	return 0;
} 
2024/8/2 14:56
加载中...