确定图形是否为树的算法

时间:2012-12-04 00:15:50

标签: algorithm data-structures graph tree

确定作为邻接矩阵给出的图是否为树的简单算法是什么?

3 个答案:

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