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)