1、问题背景
给定一个键值对字典,键是网页名称,值是网页内容。网页内容由其他网页名称组成,这些网页名称用空格分隔。目标是对于给定的网页名称,找到从首页到该网页的所有路径。
例如,给定以下字典:
{
'section-a.html': {'contents': 'section-b.html section-c.html section-d.html'},
'section-b.html': {'contents': 'section-d.html section-e.html'},
'section-c.html': {'contents': 'product-a.html product-b.html product-c.html product-d.html'},
'section-d.html': {'contents': 'product-a.html product-c.html'},
'section-e.html': {'contents': 'product-b.html product-d.html'},
'product-a.html': {'contents': ''},
'product-b.html': {'contents': ''},
'product-c.html': {'contents': ''},
'product-d.html': {'contents': ''}
}
对于给定的网页名称 'item-d'
,应找到以下路径:
'page-a > page-b > page-e > item-d'
'page-a > page-c > item-d'
为了解决这个问题,可以采用以下步骤:
以下代码实现了上述步骤:
def find_paths_to_item(item, pages):
"""
Finds all paths from the home page to a given item.
Args:
item: The item to find paths to.
pages: A dictionary of page names to page contents.
Returns:
A list of paths from the home page to the given item.
"""
# Convert the dictionary to a more usable form.
page_contents = {}
for page, contents in pages.items():
page_contents[page] = set(contents.split())
# Build a parent page dictionary.
parent_pages = {}
for page in page_contents:
parent_pages[page] = [
parent_page for parent_page in page_contents
if page in page_contents[parent_page]
]
# Find all paths from the home page to the given item.
paths = []
partial_paths = [[item]]
while partial_paths:
path = partial_paths.pop()
if parent_pages[path[-1]]:
# Add as many partial paths as open from here.
for parent_page in parent_pages[path[-1]]:
partial_paths.append(path + [parent_page])
else:
# We've reached the home page.
paths.append(path)
return paths
if __name__ == '__main__':
pages = {
'section-a.html': {'contents': 'section-b.html section-c.html section-d.html'},
'section-b.html': {'contents': 'section-d.html section-e.html'},
'section-c.html': {'contents': 'product-a.html product-b.html product-c.html product-d.html'},
'section-d.html': {'contents': 'product-a.html product-c.html'},
'section-e.html': {'contents': 'product-b.html product-d.html'},
'product-a.html': {'contents': ''},
'product-b.html': {'contents': ''},
'product-c.html': {'contents': ''},
'product-d.html': {'contents': ''}
}
paths = find_paths_to_item('item-d', pages)
print(paths)
输出结果:
[['section-a.html', 'section-b.html', 'section-e.html', 'item-d'], ['section-a.html', 'section-c.html', 'item-d']]
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。