蓝桥杯真题-危险系数DF
抗日战争时期,冀中平原的地道战曾发挥重要作用。 地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。 我们来定义一个危险系数DF(x,y): 对于两个站点x和y (x != y), 如果能找到一个站点z,当z被敌人破坏后,x和y不连通,那么我们称z为关于x,y的关键点。相应的,对于任意一对站点x和y,危险系数DF(x,y)就表示为这两点之间的关键点个数。 本题的任务是:已知网络结构,求两站点之间的危险系数。 【输入形式】 输入数据第一行包含2个整数n(2 <= n <= 1000), m(0 <= m <= 2000),分别代表站点数,通道数; 接下来m行,每行两个整数 u,v (1 <= u, v <= n; u != v)代表一条通道; 最后1行,两个数u,v,代表询问两点之间的危险系数DF(u, v)。 【输出形式】 一个整数,如果询问的两点不连通则输出-1. 【样例输入】 7 6 1 3 2 3 3 4 3 5 4 5 5 6 1 6 【样例输出】 2
from collections import defaultdict, deque #引入双端队列、特殊字典dafaultdict
def find_all_paths(graph, start, end, path=[]):
# 将起始站点添加到当前路径中
path = path + [start]
# 如果起始站点和终止站点相同,返回当前路径
if start == end:
return [path]
# 如果起始站点不在图中,返回空列表
if start not in graph:
return []
# 初始化一个空列表用于存储所有路径
paths = []
# 遍历起始站点的所有邻居节点
for node in graph[start]:
# 如果邻居节点不在当前路径中
if node not in path:
# 递归调用 find_all_paths 函数,查找从邻居节点到终止节点的所有路径
new_paths = find_all_paths(graph, node, end, path)
# 将新路径添加到所有路径列表中
for p in new_paths:
paths.append(p)
return paths
# 检查两点是否连通
def is_connected(graph, start, end, removed=None):
#记录节点的访问情况
visited = set()
#记录去除的节点
if removed is not None:
visited.add(removed)
queue = deque([start])
visited.add(start)
while queue:
node = queue.popleft()
if node == end:
return True
for neighbor in graph[node]:
if neighbor not in visited:
queue.append(neighbor)
visited.add(neighbor)
return False
# 计算危险系数
def calculate_danger_coefficient(graph, start, end):
if not is_connected(graph, start, end):
return -1
danger_count = 0
for node in graph.keys():
if node not in [start, end]:
# 去除节点node,观察start,end是否连接来确定node是否是中间节点
if not is_connected(graph, start, end, node):
danger_count += 1
return danger_count
# 读取输入
n, m = map(int, input().split())
graph = defaultdict(list)
for _ in range(m):
u, v = map(int, input().split())
graph[u].append(v)
graph[v].append(u)
start_node, end_node = map(int, input().split())
# 计算危险系数
result = calculate_danger_coefficient(graph, start_node, end_node)
print(result)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/126344.html
如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!