求助,CE
查看原帖
求助,CE
989571
_ayaka_楼主2023/10/14 10:39
#include<bits/stdc++.h>
using namespace std;
const int INF=0x7ffffff/2;
const int maxx=50005;
int d[maxx];
int vis[maxx];
int g[maxx][maxx],m,n,s;
void Read() {
	int i,x,y,w;
	cin>>n>>m>>s;
	for(i=1; i<=m; i++) {
		cin>>x>>y>>w;
		g[x][y]=w;
	}
}
void di(int v) {
	int i,j,k,minn;
	memset(vis,0,sizeof(vis));
	for(i=1; i<=n; i++) d[i]=INF;
	d[v]=0;
	for(int i=1; i<=n; i++) {
		minn=INF;
		for(j=1; j<=n; j++)
			if(!vis[j]&&minn>d[j]) {
				minn=d[j];
				k=j;
			}
		vis[k]=1;
		for(j=1; j<=n; j++)
			if(g[k][j]>0&&!vis[j]&&d[k]+g[k][j]<d[j]) {
				d[j]=d[k]+g[k][j];
			}
	}
	return ;
}
void Print(){
	for(int i=1;i<=n;i++) cout<<d[i]<<" ";
	return ;
}
int main() {
	Read();
	di(s);
	Print();
	return 0;
}
2023/10/14 10:39
加载中...