2020秋招顺丰笔试:翻译机

探讨了如何通过构建连通图解决多人间基于共同语言的交流问题,使用BFS算法遍历并确定最少的连通组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

思路:连通图问题,比如第一个人和第二个人会第一种语言,第二个人和第三个人会第二种语言,第二个人会两种语言,那么第一三两个人也能同时交流,要创建一三连通的关系,那么创建person_lan用于存放构建n个人会的语言,lan_person用于存放用于存放m种语言,哪些人会,遍历person_lan中的每个人,然后遍历每种语言对应的人,然后采用bfs的方法创建lan_person中每个人的连通。

代码:

n, m, k = 3, 3, 2
v = [[2, 3], [3, 1]]

person_lan = [[] for _ in range(n+1)]
lan_person = [[] for _ in range(m+1)]
for i in v:
    person_lan[i[0]].append(i[1])
    lan_person[i[1]].append(i[0])

flag = [False for i in range(n+1)]
res = 0
for i in range(1, n+1):
    if flag[i] == False:
        res += 1
        q = []
        q.append(i)
        flag[i] = True
        while q:
            cur = q.pop(-1)
            for j in range(len(person_lan[cur])):
                for n in range(len(lan_person[person_lan[cur][j]])):
                    if flag[lan_person[person_lan[cur][j]][n]] == False:
                        q.append(lan_person[person_lan[cur][j]][n])
                        flag[lan_person[person_lan[cur][j]][n]] == True
if k == 0:
    print(res)
else:
    print(res-1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值