给你一个N*N
的矩阵M
代表N
个用户之间的交互关系,其中M[i][j]
代表用户i
和用户j
之间的交互次数,当交互次数大于等于3
的时候,用户i
和用户j
就是豆油关系。当A
和B
互为豆油,B
和C
互为豆油,即便A
,C
之间没有交互,A
和C
也互为间接豆油。豆油之间构成的集合被称为豆油瓶,若用户不与任何人有交互关系他本身也是一个豆油瓶。
另外,i
, j
互为豆油 则M[i][j] = M[j][i]
, 自己和自己之间M[i][i] = 0
要求输入为用户个数 N
和关系矩阵N*N
,元素之间以空格分隔 ,输出为豆油瓶的个数
例1
输入
3
0 4 0
4 0 6
0 6 0
输出
1
解释用户1和用户2之间有4次交互,互为豆油,用户2和用户3之间有6次交互,,互为豆油,用户1和用户3为间接豆油。
例2
输入
3
0 0 0
0 0 0
0 0 0
输出
3
解释3用户之间都没有交互,有三个豆油瓶
待验证的答案,目前三个用例没问题
def Answer(N,nums,set_nums):
if N <= 1:
return N
for i in range(1,N):#只遍历斜下方的矩阵
for j in range(i):
if nums[i][j] >= 3:#是否为豆油
flag = False
for set1 in set_nums:
if i in set1 or j in set1:
flag = True
set1.add(i)
set1.add(j)
N -= 1
if flag == False:
set1 = set()
set1.add(i)
set1.add(j)
N -= 1
set_nums.append(set1)
return N
# while True:
# try:
# N = int(input())
# nums = [0]*N
# for _ in range(N):
# nums[i] =[int(n) for n in input().split(' ')]
# print(Answer(N,nums,[]))
# except:
# break
nums0 = [[0,0,0],[0,0,0],[0,0,0]]
nums1 = [[0,4,0],[4,0,6],[0,6,0]]
nums2 = [[0,0,6,1],[0,0,0,3],[6,0,0,0],[1,3,0,0]]
nums = nums2
N = 4
print(Answer(N,nums,[]))