迪杰斯特拉


迪杰斯特拉算法就是每次寻找与与原点最近的点然后更新与它相连的点,要注意的是传入起始点时不需要标记它,因为需要它扩展到其他点,只有当一个点出队时才需要标记它,因为后入队的同一个点可能距离更小

#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;
}
posted @   郭轩均  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示