1 solutions

  • 0
    @ 2024-4-19 15:37:01

    floyd算法

    floyd算法基于动态规划算法,dist[i][j][k]dist[i][j][k]表示当只途经11kk的点时(起始点和终止点不算),i到j的最短路长度。特别的dist[i][j][0]dist[i][j][0]表示初始时iijj的边长。

    状态计算:显然从iijj且只经过11kk的路径分为两类

    • iijj且只经过11k1k-1的路径
    • iikk再从kkjj且只经过11k1k-1的路径

    $dist[i][j][k]=min(dist[i][j][k-1],dist[i][k][k-1]+dist[k][j][k-1])$

    由于在第三维为kk的时候,需要用到k1k-1维,所以需要先枚举kk

    显然 dist[i][k][k1]dist[i][k][k]dist[i][k][k-1]和dist[i][k][k]相同,所以kk那维是多余的

    dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j])dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j])

    • 1

    Information

    ID
    291
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    10
    Tags
    # Submissions
    3
    Accepted
    2
    Uploaded By