迪杰斯特拉
迪杰斯特拉算法就是每次寻找与与原点最近的点然后更新与它相连的点,要注意的是传入起始点时不需要标记它,因为需要它扩展到其他点,只有当一个点出队时才需要标记它,因为后入队的同一个点可能距离更小
#include<iostream>
#include<queue>
#include<vector>
#define int long long
using namespace std;
const int N=1e6;
struct node{
int id,dis;
};
priority_queue<node>q;
bool operator<(node n1,node n2){
return n1.dis>n2.dis;
}
vector<node>v[N];
int w[N];
int vis[N];
void bfs(int s){
q.push({s,0});
while(!q.empty()){
node x=q.top();
q.pop();
if(vis[x.id])continue;
vis[x.id]=1;
w[x.id]=x.dis;
for(int i=0;i<v[x.id].size();i++){
if(!vis[v[x.id][i].id]){
q.push({v[x.id][i].id,x.dis+v[x.id][i].dis});
//vis[v[x.id][i].id]=1;
}
}
}
}
signed main(){
int n,m,s;
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
int U,V,K;
cin>>U>>V>>K;
v[U].push_back({V,K});
}
bfs(s);
for(int i=1;i<=n;i++)cout<<w[i]<<" ";
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY