AC

键盘敲碎夜深沉,代码如麻乱假真  •  21天前


#include<bits/stdc++.h>
using namespace std;
struct edge{
	int to;
	int val;	
};
vector<edge> g[1005];
queue<int> q;		//到待更新节点的节点队列
int dis[1005];
bool vis[1005];
int main(){
	int n,m,s;
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		g[u].push_back({v,w});
	}
	q.push(s);
	memset(dis,0x3f,sizeof dis);
	dis[s]=0;	//这个忘了
	while(!q.empty()){
		int node=q.front();
		q.pop();
		vis[node]=false;
		for(auto nxt:g[node]){
			if(dis[nxt.to]>dis[node]+nxt.val){
				dis[nxt.to]=dis[node]+nxt.val;
				if(!vis[nxt.to]){
					q.push(nxt.to);
					vis[nxt.to]=true;
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(dis[i]==0x3f3f3f3f) cout<<-1<<' ';
		else cout<<dis[i]<<' ';
	}
	return 0;
}


评论:

请先登录,才能进行评论