标题
话不多说,代码如下:
#自反闭包
#自反闭包
m=int(input()) #获得矩阵维度
B=[] #创建一个空列表,用以存放输入矩阵
C=[[0 for i in range(m)] for j in range(m)] #初始化一个列表,用于求R^0^
D=[[0 for i in range(m)] for j in range(m)] #初始化一个列表,用于结果列表的输出
for i in range(m):
B.append(list(map(int,input().split(" ")))) #获得矩阵并存入B中
for i in range(m):
C[i][i]=1 #求R^0^
for j in range(m):
for k in range(m):
if B[j][k]+C[j][k] >= 1: #对其进行与运算
D[j][k]=1 #根据和的结果与1比较来确定输入1或保持原位不变(原位的值为0)
print("r(R):")
for j in range(m):
for k in range(m):
print(D[j][k],end=" ") #输出所求矩阵
print() #确保矩阵以矩阵形式输出
#对称闭包
#对称闭包
m=int(input())
B=[]
C=[[0 for i in range(m)] for j in range(m)]
D=[[0 for i in range(m)] for j in range(m)]
for i in range(m):
B.append(list(map(int,input().split(" "))))
for j in range(m):
for k in range(m):
C[j][k]=B[k][j] #求其逆运算的矩阵
for j in range(m):
for k in range(m):
if B[j][k]+C[j][k] >= 1:
D[j][k]=1
print("s(R):")
for j in range(m):
for k in range(m):
print(D[j][k],end=" ")
print()
#传递闭包
#传递闭包
m=int(input())
B=[]
for i in range(m):
B.append(list(map(int,input().split(" "))))
for j in range(m):#列数
for k in range(m):#行数,放在列数下先对列进行遍历
if B[k][j] == 1:
for i in range(m):#对该行每列进行遍历
if B[k][i]==0 and B[j][i]==0:
B[k][i] = 0
else:
B[k][i] = 1
print("t(R):")
for j in range(m):
for k in range(m):
print(B[j][k],end=" ")
print()
#传递闭包的实现原理是算法Warshall
#求一个矩阵的的自反闭包,对称闭包和传递闭包
m=int(input())#获得矩阵的维度
E=[]
for i in range(m):
E.append(list(map(int,input().split(" "))))#创建一个空列表,并将矩阵转化为二元数组的形式
def r(m):#求自反闭包
B=E #局部变量B,避免了定义函数对数组E的处理,避免影响其他函数对E的使用
C=[[0 for i in range(m)] for j in range(m)]
D=[[0 for i in range(m)] for j in range(m)]#创建C,D两个m行m列的二元数组
for i in range(m):
C[i][i]=1 #创造IA
for j in range(m):
for k in range(m):
if B[j][k]+C[j][k] >= 1:
D[j][k]=1 #进行与运算,我用数值与1比较来确定填入1还是0
print("r(R):")
for j in range(m):
for k in range(m):
print(D[j][k],end=" ")#输出自反闭包
print()
def s(m):#求对称闭包
B=E #局部变量B,避免了定义函数对数组E的处理,避免影响其他函数对E的使用
C=[[0 for i in range(m)] for j in range(m)]
D=[[0 for i in range(m)] for j in range(m)]#创建C,D两个m行m列的二元数组
for j in range(m):
for k in range(m):
C[j][k]=B[k][j]#进行逆运算
for j in range(m):
for k in range(m):
if B[j][k]+C[j][k] >= 1:
D[j][k]=1 #进行与运算,我用数值与1比较来确定填入1还是0
print("s(R):")
for j in range(m):
for k in range(m):
print(D[j][k],end=" ")#输出对称闭包
print()
def t(m):#求对称闭包
B=E
for j in range(m):#列数
for k in range(m):#行数,行数放在列数下,是为了先列后行进行遍历
if B[k][j] == 1:
for i in range(m):#在该行进行列的遍历
if B[k][i]==0 and B[j][i]==0:
B[k][i] = 0
else:
B[k][i] = 1#逻辑与运算判断填入1或0
print("t(R):")
for j in range(m):
for k in range(m):
print(B[j][k],end=" ")#输出传递闭包
print()
def main():#定义主函数
r(m)
s(m)
t(m) #对定义函数的运用
main() #主函数