用warshall算法,计算传递闭包(以矩阵的形式)

#输入
# 7
# 1 0 0 0 0 0 0
# 0 0 0 0 0 0 0
# 0 0 0 0 0 0 1
# 0 1 0 0 0 0 0
# 0 0 1 0 0 0 0
# 1 0 0 0 0 0 0
# 0 0 0 1 0 0 0
import copy

L = []  # 建立空列表存放即将输入的矩阵
order = int(input())  # 输入矩阵的阶数
for i in range(order):
    nums = list(map(int, input().split()))
    L.append(nums)  # 依次输入每行的数字 把矩阵形成二维列表 L[0]表示该矩阵第一行所有的数字

def l_add(a, b):  # 逻辑加
    if a == 0 and b == 0:
        return 0
    else:
        return 1
def res_t(L):  # 传递闭包-warshall算法
    res_t = copy.deepcopy(L)
    for j in range(order):
        for i in range(order):#遍历一遍从第一列开始,依次到最后一列
            if int(res_t[i][j]) == 1:
                for k in range(order):
                    res_t[i][k] = l_add(int(res_t[i][k]), int(res_t[j][k]))#如果矩阵中i行j列为1,则将第i行的每个数都和j行进行或运算替代第i行(将第j行加到第i行)
    for i in res_t:
        for j in i:
            print(j, end=' ')
        print()#打印结果
print("t(R):")
res_t(L)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值