有没有办法在矩阵中查找连接?

时间:2019-08-24 07:24:51

标签: python python-3.x

我正在尝试编写一个函数,该函数将显示 这些例子。

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

1 个答案:

答案 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