Information
- ID
- 291
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 10
- Tags
- # Submissions
- 3
- Accepted
- 2
- Uploaded By
floyd算法基于动态规划算法,dist[i][j][k]表示当只途经1到k的点时(起始点和终止点不算),i到j的最短路长度。特别的dist[i][j][0]表示初始时i到j的边长。
状态计算:显然从i到j且只经过1到k的路径分为两类
$dist[i][j][k]=min(dist[i][j][k-1],dist[i][k][k-1]+dist[k][j][k-1])$
由于在第三维为k的时候,需要用到k−1维,所以需要先枚举k。
显然 dist[i][k][k−1]和dist[i][k][k]相同,所以k那维是多余的
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j])