确定作为邻接矩阵给出的图是否为树的简单算法是什么?
答案 0 :(得分:7)
如果E + 1 = V,您可以计算边缘量(E)和顶点量(V),您可以假设它是一棵树。您还需要检查是否有一个连接的组件。要弄清楚它只包含一个组件,您可以使用DFS或BFS。
答案 1 :(得分:6)
树是没有循环的图形,因此要检测图形是否为树,请检查它是否有任何循环。这可以通过遍历矩阵,保留每个被访问节点的历史记录以及访问节点,检查它是否在访问的节点集中来完成。
这是关于检测周期的先前SO帖子。这是一个起点: How to detect if a directed graph is cyclic?
您还可以研究图形遍历和邻接矩阵,为您提供更好的基础知识。
如果完成所有这些后,您仍需要帮助,则可以发布到目前为止的内容。
答案 2 :(得分:2)
一些代码(在Python中):
def is_tree(G):
n = len(G)
M = [False]*n
def dfs_tree(u, v):
M[v] = True
return all(w==u or not M[w] and dfs_tree(v, w) for w in range(n) if G[v][w])
return dfs_tree(0, 0) and all(M)
print is_tree([
[0, 1, 1],
[1, 0, 0],
[1, 0, 0],
])
'''
0-1
|
2
True
'''
print is_tree([
[0, 1, 1],
[1, 0, 1],
[1, 1, 0],
])
'''
0-1
|/
2
False
'''