• 堆优化Dijkstra java模板


    import java.util.*;
    import java.lang.*;
    import java.awt.datatransfer.FlavorEvent;
    import java.io.*;
    import java.security.spec.ECField;
    import java.util.List;
    import java.util.Scanner;
    import java.io.*;
    //public class Main{
    //    public static void main(String []args){
    //
    //    }
    //
    //}
    public class Main{
        static class Pair implements Comparable<Pair>{
            int w,x;
            Pair(){
    
            }
            Pair(int a_,int b_){
                w=a_;x=b_;
            }
    
            @Override
            public int compareTo(Pair o) {
                return w-o.w;
            }
        }
        static int []dis = new int [1010];
        static int INF = 0x3f3f3f3f;
        static int [] to = new int [1010];
        static int [] w = new int [1010];
        static int [] nxt = new int [1010];
        static int [] head = new int [1010];
        static int [] vis = new int [1010];
        static int cnt = 0;
        static PriorityQueue<Pair> q = new PriorityQueue<>();
        public static void ADD(int u,int v,int ww){
            to[cnt]=v;
            w[cnt]=ww;
            nxt[cnt]=head[u];
            head[u]=cnt;cnt++;
        }
        public static int diji(int st,int en){
            Arrays.fill(dis,INF);
            Arrays.fill(vis,0);
            dis[st]=0;
            q.add(new Pair(0,st));
            while (!q.isEmpty()){
                Pair t= q.poll();
                if(vis[t.x]==1)continue;
                vis[t.x]=1;
                for(int i=head[t.x];i!=-1;i=nxt[i]){
                    int v = to[i];
                    if(dis[v]>t.w+w[i]){
                        dis[v] = t.w+w[i];
                        q.add(new Pair(dis[v],v));
                    }
                }
            }
            return dis[en];
        }
        public static void main(String []args){
            Scanner sc = new Scanner(System.in);
            Arrays.fill(head,-1);
            for(int i=0;i<4;i++){
                int u,v,ww;
                u=sc.nextInt();
                v=sc.nextInt();
                ww=sc.nextInt();
                ADD(u,v,ww);
                ADD(v,u,ww);
            }
            System.out.println(diji(0,3));
            for(int i=0;i<4;++i){
                System.out.print(dis[i]+" ");
            }
        }
    
    }

    样例:

    0 1 1

    1 2 2

    2 3 1

    1 3 6

    输出 4

  • 相关阅读:
    Numpy存字符串
    一个类似于postman的协议测试工具
    freetds设置超时
    学习jQuery
    webpy 使用python3开发
    gdb调试coredump文件
    htop和ncdu
    rqalpha-自动量化交易系统(一)
    perl学习-运算符添加引号
    xss 和 csrf攻击详解
  • 原文地址:https://www.cnblogs.com/kayiko/p/14850199.html
Copyright © 2020-2023  润新知