现在的位置: 首页 > 综合 > 正文

HDU 1385 Minimum Transport Cost(多源最短路径+路径记录)

2013年10月27日 ⁄ 综合 ⁄ 共 330字 ⁄ 字号 评论关闭

p[i][j]记录从i到j的路径上的下一个结点(后继),修改最短路时更新即可。

void floyd()
{
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(map[i][j]>map[i][k]+map[k][j]+b[k]){
                    map[i][j]=map[i][k]+map[k][j]+b[k];
                    h[i][j]=h[i][k];
            }
            else if(map[i][j]==map[i][k]+map[k][j]+b[k]){//路径长度相同要求字典序最小
                if(h[i][j]>h[i][k])
                    h[i][j]=h[i][k];
            }
}

拓展:若要求记录前驱结点则修改为h[i][j]=h[k][j].

抱歉!评论已关闭.