字节跳动,2020第二次算法,第一题 豆油瓶

题目描述:
抖音上每天都有几亿用户,如果用户 A 和 B 互动不少于 3 次,我们就认为 A 和 B 属于“豆油”,如果 A 和 B 是“豆油”,B 和 C 也是“豆油”, 那么 A 和 C 也互为“豆油”,我们定义“豆油瓶”就是由直系和间接朋友所组成的群体。

给定个 N×N 的矩阵 M,代表抖音上所有用户的互动次数,如果M[i][j]= 5,那么第i个和第j个用户就互动过5次,为 0 的话代表没有互动,对于i = j,即同个用户, 互动次数我们计为0。请你计算并输出发现的抖音上所有“豆油瓶”的个数。

输入描述:
输入第1行:二维数组的行数(列数一样)N
接下来的N行每行N个数字,空格分割

输出描述:
输出发现的“豆油瓶”数量 k

示例1:
输入

3
0 4 0
4 0 0
0 0 0

输出

2

解释:第1个和第2个用户互动超过3次,互为豆油第3个学生和其他人没有互动,自成个豆油瓶,所以结果为2

示例2:
输入

3
0 4 0
4 0 6
0 6 0

输出

1

解释:第1个和第2个用户互动超过3次,互为豆油,第2个和第3个用户也互为豆油,所以1和3互为间接豆油,三个用户都在同一个豆油瓶里,返回1

N的范围为[1,200]
所有学生自己对自己都是1,即M[i][i]=1
如果M[i][j]=1,那么M[j][i]=1

if __name__ == "__main__":
    n = int(input())
    net = []
    for i in range(n):
        node = [int(x) for x in input().strip().split(' ')]
        net.append(node)
    vis = [0]*n
    res = 0
    while min(vis) == 0:
        t = [i for i in range(n) if vis[i] == 0]
        vis[t[0]] = 1
        q = []
        q.append(t[0])
        while q:
            h = q.pop(0)
            for j in range(n):
                if net[h][j] >=3 and vis[j] == 0:
                    q.append(j)
                    vis[j] = 1
        res += 1
    print(res)
#字节跳动##笔试题目##秋招#
全部评论

相关推荐

点赞 5 评论
分享
牛客网
牛客企业服务