checkio-how to find friends
来源:互联网 发布:初级程序员考试内容 编辑:程序博客网 时间:2024/05/29 14:10
寻找朋友。
想法是找到所有和first有关系的朋友(包括1跳关系及多跳关系)。问题是怎么找多跳关系的朋友加到列表里面。看别人的代码,解释。。。
第一个,by***StefanPochmann***
def check_connection(network, first, second): team = {first} for _ in network: for edge in network: pair = set(edge.split('-')) if pair & team: team |= pair return second in team
精简至极。team保存所有和first有关系的朋友。大循环第一次遍历,找出所有和first有1跳关系的朋友放在team中。 这时team中是first加上所有1跳的朋友。大循环第二次循环,重新遍历所有network中朋友对,如果某对朋友对和team中德元素有交集,就将该对朋友和team求并。得到所有和first以及first的1跳朋友的集合的1跳朋友集合,即所有first2跳以内朋友。以此类推。最坏情况是一条直线的关系,所以大循环必要。很黄很暴力,越往后循环每次做的无用计算就越多。
by github jingyuan4ever
def check_connection(network, first, second): d = dict() for i in network: p1, p2 = i.split('-') d.setdefault(p1, []).append(p2) d.setdefault(p2, []).append(p1) opn = [first] cls = [] while len(opn): now = opn.pop() cls.append(now) if now == second: return True for next in d.setdefault(now, []): if next not in cls and next not in opn: opn.append(next) return False
用到了字典中的setdefault函数,每一个人对应一个key,value中存的是1跳关系的朋友。自己演绎了一下发现正确,个中道理还不是很懂。。自己写怎么想到用cls和opn两个list搞来搞去就成功了。。。
0 0
- checkio-how to find friends
- Checkio--Friends
- Python checkio "Friends"解决方案
- checkio (How much gold)
- How to Find BAPI
- checkio -- Find Sequence
- How to implement "Find Target"
- how to find user exit
- How to Find BADI(UserExit)
- how to find the badi?
- How to Find the Prefect Color?
- How to Find Suspicious Access Paths
- How to find cheap sunglasses and gift
- How to Find A Memory Leak
- How to find a goog Job
- How to find Mister/Miss right
- how to find deadlock scenario using gdb
- How to find a laptop for me
- Android各厂商自启动管理开发
- if 和 switch的区别和应用
- 推荐一个安卓开发用得到的Chrome插件
- GDT,LDT,GDTR,LDTR 详解,包你理解透彻
- AngularJS如何在同一个界面启动多个ng-app应用模块
- checkio-how to find friends
- ios-NSString与NSDate互相转换及时间早晚比较
- 设置launchImage显示的时间
- 遗传算法
- Transaction 那点事儿
- 微信网页授权开发实例--esay版
- Spring+dubbo+mybatis出现NoSuchMethodError和MutablePropertyValues.add异常
- java对cookie的操作
- 对于Java中函数参数传递的理解