Floyd循环顺序错了。先循环k再循环i,j。
正确代码:
for(int k=1; k<=v; k++) for(int j=1; j<=v; j++) for(int i=1; i<=v; i++) st[i][j]=min(st[i][j], st[i][k]+st[k][j]);
(st是路径长度)