day 60 图论part11

文章目录

  • [Floyd 算法精讲 97. 小明逛公园](#Floyd 算法精讲 97. 小明逛公园)
  • [A * 算法精讲 (A star算法)127. 骑士的攻击](#A * 算法精讲 (A star算法)127. 骑士的攻击)
  • 最短路算法总结篇
  • 图论总结篇

Floyd 算法精讲 97. 小明逛公园

注意三维dp数组的含义,从i到j需要能够经过k个节点的最短路径。

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

class Main {
    public static int MAX_VAL = 10005;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[][][] dp = new int[n + 1][n + 1][n + 1];
        for (int i = 1; i <=n; i++) {
            for (int j = 1; j <=n; j++) {
                for(int k = 0; k <= n; k++) {
                    dp[i][j][k] = MAX_VAL;
                    
                }
            }
        }
        for (int i = 0; i < m; i++) {
            int u = sc.nextInt();
            int v = sc.nextInt();
            int w = sc.nextInt();
            dp[u][v][0] = w;
            dp[v][u][0] = w;
        }
        int q = sc.nextInt();
        for (int k = 1; k <= n; k++) {
            for (int i = 1; i <=n; i++) {
                for (int j = 1;j <= n; j++) {
                    dp[i][j][k] = Math.min(dp[i][j][k - 1], dp[i][k][k - 1] + dp[k][j][k - 1]);
                }
            }
        }
        for (int i = 0; i < q; i++) {
            int src = sc.nextInt();
            int dst = sc.nextInt();
            if (dp[src][dst][n] == MAX_VAL) {
                System.out.println(-1);
            }
            else {
                System.out.println(dp[src][dst][n]);
            }
        }

    }
}

A * 算法精讲 (A star算法)127. 骑士的攻击

定义一个启发式函数来优化BFS算法。

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


public class Main {
    private static final int[][] MOVES = {
        {1, 2}, {2, 1}, {-1, 2}, {2, -1},
        {1, -2}, {-2, 1}, {-1, -2}, {-2, -1}
    };
    static class Node implements Comparable<Node> {
        int x, y, steps;
        double priority;

        Node(int x, int y, int steps, double priority) {
            this.x = x;
            this.y = y;
            this.steps = steps;
            this.priority = priority;
        }

        @Override
        public int compareTo(Node other) {
            return Double.compare(this.priority, other.priority);
        }
    }
    private static double getDistance(int x1, int y1, int x2, int y2) {
        return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
    }

    public static int aStar(int startX, int startY, int endX, int endY) {
        if (startX == endX && startY == endY) return 0;
        PriorityQueue<Node> pq = new PriorityQueue<>();

        Map<String, Integer> minSteps = new HashMap<>();

        String startKey = startX + "," + startY;
        pq.add(new Node(startX, startY, 0, getDistance(startX, startY, endX, endY)));
        minSteps.put(startKey, 0);


        while (!pq.isEmpty()) {
            Node curr = pq.poll();
            if (curr.x == endX && curr.y == endY) {
                return curr.steps;
            }

            for (int[] move : MOVES) {
                int nextX = curr.x + move[0];
                int nextY = curr.y + move[1];
                if (nextX >= 1 && nextX <= 1000 && nextY >= 1 && nextY <= 1000) {
                    int nextSteps = curr.steps + 1;
                    double nextpriority = nextSteps + getDistance(nextX, nextY, endX, endY);
                    pq.add(new Node(nextX, nextY, nextSteps, nextpriority));
                }
             }
        }
        return -1;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            int a1 = sc.nextInt();
            int b1 = sc.nextInt();
            int a2 = sc.nextInt();
            int b2 = sc.nextInt();
            System.out.println(aStar(a1, b1, a2, b2));
        }
    }
 }

最短路算法总结篇

dijkstra朴素版

dijkstra堆优化版

Bellman_ford

Bellman_ford 队列优化算法(又名SPFA)

bellman_ford 算法判断负权回路

bellman_ford之单源有限最短路

Floyd 算法精讲

启发式搜索:A * 算法

图论总结篇

深搜与广搜

并查集

最小生成树

拓扑排序

最短路算法

相关推荐
数智化管理手记1 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
2501_906565121 小时前
数学之美探究
算法
oier_Asad.Chen2 小时前
【洛谷题解/AcWing题解/OI学习笔记】洛谷P2868【USACO07DEC】Sightseeing Cows G(01分数规划求最大比率)
算法·图论·spfa·二分·负环
cfm_29142 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
鲸采云SRM采购管理系统3 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
leisoo80973 小时前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
0x533 小时前
Java网络编程(二)
java·服务器·网络
Flittly4 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
Poo_Chai4 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库
瑞码空间4 小时前
Java 图形界面(GUI)完整知识点手册
java·开发语言·图形界面·swing