zoukankan      html  css  js  c++  java
  • 单源最短路径问题2 (Dijkstra算法)

    用邻接矩阵

    /*
    单源最短路径问题2 (Dijkstra算法)
    样例:
        5 7
        0 1 3
        0 3 7
        1 2 4
        1 3 2
        2 3 5
        2 4 6
        3 4 4
    输出:
        [0, 3, 7, 5, 9]
    */
    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        //图的顶点数,总边数
        static int V, E;
        //存储所有的边,大小为顶点数
        static int[][] Edges;
        static int[] d;
        static boolean[] visited;
        static final int MAX_VALUE = 999999;
    
        public static void main(String[] args) {
            creatGraph();
            shortPath(1);
            System.out.println(Arrays.toString(d));
        }
    
        static void shortPath(int start) {
            d = new int[V];
            visited = new boolean[V];
            Arrays.fill(d, MAX_VALUE);
            d[start] = 0;
            while (true) {
                int min_index = -1;
                for (int j = 0; j < V; j++) {
                    if (!visited[j] && (min_index == -1 || d[j] < d[min_index])) {
                        min_index = j;
                    }
                }
                if (min_index == -1) break;
                visited[min_index] = true;
                for (int u = 0; u < V; u++) {
                    d[u] = Math.min(d[u], d[min_index] + Edges[min_index][u]);
                }
            }
        }
    
        static void creatGraph() {
            Scanner sc = new Scanner(System.in);
            V = sc.nextInt();
            E = sc.nextInt();
            Edges = new int[V][V];
            for (int[] i : Edges)
                Arrays.fill(i, MAX_VALUE);
            for (int i = 0; i < E; i++) {
                int u = sc.nextInt();
                int v = sc.nextInt();
                int w = sc.nextInt();
                Edges[u][v] = w;
                Edges[v][u] = w;
            }
        }
    }
    
     

    用邻接表

    /*
    单源最短路径问题2 (Dijkstra算法)
    样例:
        5 7
        0 1 3
        0 3 7
        1 2 4
        1 3 2
        2 3 5
        2 4 6
        3 4 4
    输出:
        [0, 3, 7, 5, 9]
    */
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        //图的顶点数,总边数
        static int V, E;
        //存储所有的边,大小为顶点数
        static ArrayList<Edge>[] Edges;
        static int[] d;
        static boolean[] visited;
        static final int MAX_VALUE = 999999;
    
        public static void main(String[] args) {
            creatGraph();
            shortPath(1);
            System.out.println(Arrays.toString(d));
        }
    
        static void shortPath(int start) {
            d = new int[V];
            visited = new boolean[V];
            Arrays.fill(d, MAX_VALUE);
            d[start] = 0;
            while (true) {
                int min_index = -1;
                for (int j = 0; j < V; j++) {
                    if (!visited[j] && (min_index == -1 || d[j] < d[min_index])) {
                        min_index = j;
                    }
                }
                if (min_index == -1) break;
                visited[min_index] = true;
                for (Edge i : Edges[min_index]) {
                    d[i.to] = Math.min(d[i.to], d[min_index] + i.cost);
                }
            }
        }
    
        static void creatGraph() {
            Scanner sc = new Scanner(System.in);
            V = sc.nextInt();
            E = sc.nextInt();
            Edges = new ArrayList[V];
            for (int i = 0; i < V; i++)
                Edges[i] = new ArrayList();
            for (int i = 0; i < E; i++) {
                int u = sc.nextInt();
                int v = sc.nextInt();
                int w = sc.nextInt();
                Edges[u].add(new Edge(v, w));
                Edges[v].add(new Edge(u, w));
            }
        }
    }
    
    class Edge {
        int to;
        int cost;
    
        public Edge(int to, int cost) {
            this.to = to;
            this.cost = cost;
        }
    }
  • 相关阅读:
    不知道搜索引擎对display:none和visibility:hidden是怎么个看法
    《Effective C#中文版:改善C#程序的50种方法》前言
    SEO实践之网站内部结构设计优化
    友情提示:职场修炼,参加招聘会注意事项
    CSS命名规范
    发布两款纯CSS编写的下拉菜单已测IE6,7,8,FF均可运行
    解读2010年中国九大SEO新星工作室
    南通SEO爱好者之“拿来主义”!
    轻松一刻——幽默
    大学生进行职业选择要有市场意识
  • 原文地址:https://www.cnblogs.com/Alpharun/p/8658400.html
Copyright © 2011-2022 走看看