键盘敲碎夜深沉,代码如麻乱假真 • 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;
}
评论:
请先登录,才能进行评论