📅  最后修改于: 2023-12-03 15:26:48.514000             🧑  作者: Mango
在有向图中,每个顶点通常会有若干个入度和出度。对于一个顶点,如果我们需要检查它的所有入边是否等于该顶点本身,该怎么实现呢?
我们可以先遍历该顶点的所有入边,然后依次比较它们的起始点和该顶点是否相等即可。如果所有入边的起始点都等于该顶点本身,那么该顶点满足条件,否则不满足条件。
下面是一个示例代码:
def check_incoming_edges(vertex, edges):
"""
检查有向图顶点中的传入边是否等于顶点本身
:param vertex: 待检查顶点
:param edges: 边集合,格式为 [(start, end), ...]
:return: 如果所有入边的起始点都等于该顶点本身,返回 True,否则返回 False
"""
for edge in edges:
if edge[1] == vertex and edge[0] != vertex:
return False
return True
该方法接受两个参数:待检查的顶点和所有边的集合。其中,每条边的格式为 (start, end)
,表示从起始点 start
指向结束点 end
。方法遍历所有入边,如果找到一条起始点不等于该顶点本身的边,那么该顶点不满足条件,直接返回 False。否则,如果所有入边的起始点都等于该顶点本身,就返回 True。
下面是一个简单的测试:
# 构造一个有向图
edges = [(1, 2), (3, 2), (4, 2), (2, 5), (2, 6), (2, 7), (8, 2)]
# 检查各个顶点的入边是否等于顶点本身
assert check_incoming_edges(1, edges) == True # 1 没有入边
assert check_incoming_edges(2, edges) == True # 2 的所有入边来自 1、3、4、8
assert check_incoming_edges(3, edges) == False # 3 的入边来自 1,不等于本身
assert check_incoming_edges(4, edges) == False # 4 的入边来自 1,不等于本身
assert check_incoming_edges(5, edges) == True # 5 的唯一入边来自 2,等于本身
assert check_incoming_edges(6, edges) == True # 6 的唯一入边来自 2,等于本身
assert check_incoming_edges(7, edges) == True # 7 的唯一入边来自 2,等于本身
assert check_incoming_edges(8, edges) == False # 8 的入边来自 2,不等于本身
从输出可以看到,测试全部通过。