算法打卡:第十一章 图论part11

今日收获:Floyd 算法,A * 算法,最短路算法总结

1. Floyd 算法

题目链接:97. 小明逛公园

思路:Floyd用于解决多源最短路问题,对边的正负权值没有要求。核心是动态规划

(1)dp数组的定义:grid[i][j][k] = m,表示 节点i 到 节点j 以中间节点[1...k] 集合的最短距离为m

(2)初始化:刚开始从 i 到 j 没有经过任何中间节点,所以 k 初始化为0

(3)遍历顺序:算法相当于不断把新的节点加入,计算起点到终点的最短距离,所以外层遍历 k,里面遍历 i 和 j

(4)递推公式:分为经过/不经过 k 节点,两者取较小值。grid[i][j][k] = min(grid[i][k][k - 1] + grid[k][j][k - 1], grid[i][j][k - 1])

方法:

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int N=sc.nextInt();
        int M=sc.nextInt();
        
        int[][][] grid=new int[N+1][N+1][N+1];
        
        // 初始化动态规划数组
        for (int i=0;i

你可能感兴趣的:(数据结构与算法,算法,图论,数据结构,java)