我正在尝试编写一个函数,该函数将显示 这些例子。
a。连接(错误) 节点1连接到节点2
b。共享连接(真) 节点1连接到节点2,而节点2连接到节点3 因此,意味着节点1和节点3与节点2共享连接
c。断线(假) 节点1和节点4完全断开
它需要返回一个布尔值,例如
matrix = [[ [0,1,1,1,0],
[1,0,0,1,0],
[1,0,0,0,1],
[1,1,0,0,0],
[0,0,1,0,0] ]
调用nodeconn(matrix,0,4)应该返回true,因为矩阵显示了节点0和节点4之间共享的连接,两者都连接到节点2。
还调用nodeconn(matrix,1,4)应该返回False,因为1和4没有共同的节点
我尝试将矩阵转换为边列表,并使用for循环遍历。它没有用,所以我改变了方法
def nodeconn(matrix, node1, node2):
n1 = matrix[node1]
n2 = graph_matrix[node2]
for index in matrix:
for connections in index:
if connections in n1 and n2:
return True
elif nd1[node2]==1:
return False
return False
答案 0 :(得分:1)
如果要在路径中查找与> 1个节点的共享连接,可以使用bfs:
def check_if_path_exists(matrix, node1, node2):
queue = [node1]
visited = set()
while queue:
current_node = queue.pop(0)
visited.add(current_node)
for index, is_connected in enumerate(matrix[current_node]):
if not is_connected:
continue
if index == node2:
return True
elif index not in visited and index not in queue:
queue.append(index)
return False
def check_if_connection_is_shared(matrix, node1, node2):
if matrix[node1][node2]:
return False # connected
return check_if_path_exists(matrix, node1, node2)
如果要查找共享连接中只有1个节点的节点,可以简化此代码:
def check_if_connection_is_shared(matrix, node1, node2):
if matrix[node1][node2]:
return False # connected directly
for a, b in zip(matrix[node1], matrix[node2]): # if both node1 and node2 are connected to the same node, in connections list element with this node number will be 1 for both node1 and node2.
if a and b:
return True
return False