zoukankan      html  css  js  c++  java
  • 算法模板之Dijkstra

    Dijkstra是求单源最短路的一种算法,它不能够处理含有负权边的图。本质是递推,依次求出距离起点最近的点。

    C++ 板子

    #include<bits/stdc++.h>
    #define ll long long
    /*
    题目链接:https://www.luogu.com.cn/problem/P3371
    */
    using namespace std;
    const int N=5e5+50;
    const int inf=0x3f3f3f3f;
    ll n,m,top,s,bad;
    int e[N][2],nxt[N],hd[20000],dis[20000],vis[20000];
    void add(int u,int v,int w){
        e[++top][0]=v,e[top][1]=w;
        nxt[top]=hd[u];
        hd[u]=top;
    }
    int main() {
        
        bad = (1L<<32)-1;
        
        cin >> n >> m >> s;
        for(int i=1;i<=m;i++) {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            add(u,v,w);
        }
        
        priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > pq;
        pq.push(make_pair(0,s)); 
        memset(dis,0x3f,sizeof(dis));
        dis[s]=0;
        
        pair<int,int>p;
        while(pq.size()) {
            p = pq.top();
            pq.pop();
            int u=p.second;
            if(vis[u]) continue;
    		vis[u]=1;
            for(int ev=hd[u];ev;ev=nxt[ev]) {
                int v=e[ev][0],w=e[ev][1];
                if(dis[u]+w<dis[v]) {
                    dis[v]=dis[u]+w;
                    pq.push(make_pair(dis[v],v));
                }
            }
        }
        
        for(int i=1;i<=n;i++) {
            if(dis[i]>=inf) {
                printf("%lld",bad);
            }else {
                printf("%d ",dis[i]);
            }
        }
        return 0;
    }
    
    

    java板子

    /*
      java板子与c++板子并无大的区别,这里主要是写一下java的priorityqueue的写法
      剩下的其实都一样。
      需要注意的是,java默认的小根堆,而c++默认的是大根堆
    */
    
    PriorityQueue<int[]>pq = new PriorityQueue<>( (a,b)->a[0]-b[0] );
    
    
  • 相关阅读:
    print格式化输出(format)
    Python list,tuple,dict,set高级变量常用方法
    K8s的kubectl常用命令
    C/C++中数组与指针的关系探究
    Java中的不可变类
    JAVA 类总结
    c++ string类find总结
    关于看板娘的事儿
    类型转换
    计算机2进制小数点表示法
  • 原文地址:https://www.cnblogs.com/backkom-buaa/p/13855320.html
Copyright © 2011-2022 走看看