下面有一个邻接矩阵D.如果矩阵中的所有顶点都连接,我如何编写一个返回True的python函数,否则返回False?
D = [['a', 'c', 'g', 'w', 'Q', 'f', 'Z', 't', 'R'], [0, 1, 2, 1, 9, 0, 0, 0, 0], [1, 0, 3, 4, 0, 0, 0, 0, 0], [2, 3, 0, 15, 2, 0, 0, 0, 0], [1, 4, 15, 0, 7, 0, 0, 0, 0], [9, 0, 2, 7, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 9, 0], [0, 0, 0, 0, 0, 2, 0, 0, 20], [0, 0, 0, 0, 0, 9, 0, 0, 0], [0, 0, 0, 0, 0, 0, 20, 0, 0]]
def connectivity(adjMatrix):
connected = True
while connected == True:
# some algorithm that checks that each vertex can be connected to any other vertex
# if connected -> remains True
# if not connected -> False
return connected
print(connectivity(D))
答案 0 :(得分:0)
您可以使用DFS或深度优先搜索。您只需要在一个顶点上运行,因为如果一个顶点连接到所有节点,则意味着图中存在完全连接。
这是递归实现的DFS的伪代码(使用调用堆栈):
def DFS(vertex, adj, vis):
# adj is the adjacency matrix and vis is the visited nodes so far
set vertex as visited # example if vis is list: vis[vertex] = True
for vert in adj[vertex]:
if vert is not visited:
DFS(vertex, adj, vis)
return whether or not all vertices are visited # this only needs to happen
# for the first call
该算法的运行时间为O(n),空间复杂度为O(n)(对于vis
数组)。
答案 1 :(得分:0)
由于这是搜索“检查图的邻接矩阵的连通性”时出现的答案,所以让我们实际回答这个问题,而不是将其留在“这是一个很好理解的主题”。
只需使用 NetworkX's is_connected
function。
假设您的邻接矩阵已经是 numpy 格式:
# An adjacency matrix is a square, binary matrix.
G = nx.from_numpy_matrix(adj_matrix)
if nx.is_connected(G):
pass # We're done! That easy.
如果您对连通组件(而不是整个图)更感兴趣,read here。
如果您需要输入不同格式的邻接矩阵,try here。
对于使用图论的人也很感兴趣:the algebraic connectivity of a graph。