day 57 图论part9

文章目录

  • [dijkstra(堆优化版)精讲 47. 参加科学大会(第六期模拟笔试)](#dijkstra(堆优化版)精讲 47. 参加科学大会(第六期模拟笔试))
  • [Bellman_ford 算法精讲 94. 城市间货物运输 I](#Bellman_ford 算法精讲 94. 城市间货物运输 I)

dijkstra(堆优化版)精讲 47. 参加科学大会(第六期模拟笔试)

加入小顶堆,每次从优先队列获取到最小值,不需要遍历整个数组。

java 复制代码
import java.util.*;


class Edge {
    int to;
    int val;
    Edge(int to, int val) {
        this.to = to;
        this.val = val;
    }
}

class Pair {
    public int first;
    public int second;
    Pair(int first, int second) {
        this.first = first;
        this.second = second;
    }
}

class MyComparision implements Comparator<Pair> {
    @Override
    public int compare(Pair r, Pair l) {
        return Integer.compare(r.second, l.second);
    }
}


class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] minDist = new int[n + 1];
        List<List<Edge>> grid = new ArrayList<>(n + 1);
        Arrays.fill(minDist, Integer.MAX_VALUE);
        for (int i =0; i <= n; i++) {
            grid.add(new ArrayList<>());
        }
        for (int i = 0; i < m; i++) {
            int s = sc.nextInt();
            int t = sc.nextInt();
            int val = sc.nextInt();
            grid.get(s).add(new Edge(t, val));
        }
        boolean[] visited  = new boolean[n + 1];
        PriorityQueue<Pair> pq = new PriorityQueue<>(new MyComparision());
        pq.add(new Pair(1, 0));
        minDist[1] = 0;

        while (!pq.isEmpty()) {
            Pair cur = pq.poll();
            visited[cur.first] = true;
            for (Edge edge : grid.get(cur.first)) {
                if (!visited[edge.to] && minDist[edge.to] > minDist[cur.first] + edge.val) {
                    minDist[edge.to] = minDist[cur.first] + edge.val;
                    pq.add(new Pair(edge.to, minDist[edge.to]));
                }
            }
        }
        if (minDist[n] == Integer.MAX_VALUE) {
            System.out.println(-1);
        }
        else {
            System.out.println(minDist[n]);
        }
    }
}

Bellman_ford 算法精讲 94. 城市间货物运输 I

总共最多需要松弛边n - 1次,得到每一个点到原点的最短距离。

java 复制代码
import java.util.*;


class Edge {
    int from;
    int to;
    int val;
    Edge(int from, int to, int val) {
        this.from = from;
        this.to = to;
        this.val = val;
    }
}
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        List<Edge> edges = new ArrayList<>();
        
        for (int i = 0; i < m; i++) {
            int s = sc.nextInt();
            int t = sc.nextInt();
            int v = sc.nextInt();
            edges.add(new Edge(s, t, v));
        }
        int[] minDist = new int[n + 1];
        Arrays.fill(minDist, Integer.MAX_VALUE);
        minDist[1] = 0;

        for (int i = 1; i < n; i++) {
            for (Edge edge : edges) {
                if (minDist[edge.from] != Integer.MAX_VALUE && minDist[edge.from] + edge.val < minDist[edge.to]) {
                    minDist[edge.to] = minDist[edge.from] + edge.val;
                }
            }
        }
        if (minDist[n] == Integer.MAX_VALUE) {
            System.out.println("unconnected");
        }
        else {
            System.out.println(minDist[n]);
        }

    }
}
相关推荐
人工智能时代 准备好了吗4 小时前
AI回答内容进入率监测:引用识别、文本匹配与语义判断
开发语言·人工智能·python
LONGZETECH4 小时前
新能源汽车动力电池检测仿真教学系统:C/S 分层架构与数字化实训落地全解析
大数据·c语言·开发语言·人工智能·架构·系统架构·汽车
郝学胜-神的一滴4 小时前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal
在书中成长4 小时前
HarmonyOS 小游戏《对战五子棋》开发第18篇 - 棋盘设计
算法·harmonyos
Frostnova丶4 小时前
(12)LeetCode 76. 最小覆盖子串
算法·leetcode·职场和发展
淘源码d4 小时前
医学影像云PACS系统——PACS诊断工作站
java·源码·影像处理·医院管理系统·影像工作站·云pacs系统·dicom 标准通信
灯澜忆梦4 小时前
GO_函数_1
算法
小七在进步4 小时前
数据结构:栈与队列之栈的实现
数据结构
言乐64 小时前
Python实现建造微服务商城后台
开发语言·python·算法·微服务·架构
NiceCloud喜云5 小时前
Anthropic 一周三连发:Cowork 多端、Fable 5 按需付费、J-space 论文的技术解读
java·服务器·网络·人工智能·ai