写于开头的话:算法小菜鸡,边学边总结。
正文:
朋友圈适合用图来表示,如下图中左边“数据关系图”是我的朋友圈,画圈的点是“我”。此图为有向图,(应该画上箭头会更准确),我有3个朋友,我的朋友又各自有0到多个朋友。
要找出小明,就是从这个图中找。
下图中右边是代码实现时的查找路径,一会从代码中可以看到该数据流向。
图:完全基于个人理解的总结,一千个人眼中有一千个林黛玉,所以可略过,直接看代码,若代码不明白,可一看。
上菜:
from collections import deque
# 问题:找出关系图中有没有小明
# 1. 定义数据关系图
graph = {}
graph['bob'] = ['liming', 'xiaohong']
graph['liming'] = ['lixiao', 'lida']
graph['xiaohong'] = []
graph['lixiao'] = ['xiaoming']
graph['lida'] = ['dali']
graph['xiaoming'] = []
graph['dali'] = []
def search(name):
search_deque = deque()
searched = {}
search_deque.append(name)
while search_deque:
search_name = search_deque.popleft()
if not searched.get(search_name):
if search_name == 'xiaoming':
return True
else:
search_deque.extend(graph[search_name])
return False
if __name__ == '__main__':
# 2. 查找小明
res = search('bob')
print(res)
运行该脚本,会输出True。
试试把小明去掉。
参考资料:书籍《算法图解》(微信读书有)