求矩阵传递闭包_算法学习笔记(57): 传递闭包

之前在题解里看到“传递闭包”,一直以为是一种很高级的算法,后来上离散数学的时候学到了,发现其实蛮简单的。

从数学上来说,传递闭包是在集合

上求包含关系
的最小传递关系。从关系图的角度来说,就是如果原关系图上有
路径,则其传递闭包的关系图上就应有从
。通俗地讲,就是 确定每个点是否能到达其他每个点

而这,把Floyd最短路算法稍微改一下即可。设E是原来的关系矩阵,则可以这样写:

for (int k = 1; k <= n; ++k)
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
            if (E[i][k] && E[k][j])
                E[i][j] = 1;

就是依次判断:仅经由1号点能不能从i到达j,仅经由1、2号点能不能从i到达j……最后得到的E是传递闭包的关系矩阵。 E[i][j]如果等于1,则表示存在从ij的路径。时间复杂度是


(POJ1975 Median Weight Bead)

Description
There are N beads which of the same shape and size, but with different weights. N is an odd number and the beads are labeled as 1, 2, ..., N. Your task is to find the bead whose weight is median (the ((N+1)/2)th among all beads). The
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值