0.search
lab0
环境
实验地址:https://cs50.harvard.edu/ai/2024/projects/0/degrees/
WSL2 Ubuntu20.04

#安装实验测试工具
pip install check50
背景要求
基于六度分割理论,通过参演电影找出两个电影演员之间的联系
实现
def shortest_path(source, target):
"""
Returns the shortest list of (movie_id, person_id) pairs
that connect the source to the target.
If no possible path, returns None.
"""
lastNode = None
result = []
visited = set()
visited_movies = set()
# BFS
root = Node(source, None, None)
queue = QueueFrontier()
visited.add(source)
queue.add(root)
while not queue.empty():
# 获取当前用户id
curNode = queue.remove()
if target == curNode.state:
lastNode=curNode
break
p_id = curNode.state
# 获取参演电影
movice_ids = people[p_id]["movies"]
# 获取电影的star 逐个遍历
for movie_id in movice_ids:
if movie_id in visited_movies:
continue
stars = movies[movie_id]['stars']
for star_id in stars:
if star_id in visited:
continue
pNode = Node(curNode.state, curNode.parent, curNode.action)
node = Node(star_id, pNode, movie_id)
visited.add(star_id)
queue.add(node)
visited_movies.add(movie_id)
if lastNode is not None:
while lastNode.parent is not None:
m = lastNode.action
p = lastNode.state
result.insert(0,(m,p))
lastNode=lastNode.parent
return result
else:
return None
结果
# 输入命令测试结果
check50 -l ai50/projects/2024/x/degrees

代码地址