树到邻接矩阵python

时间:2017-05-13 22:35:13

标签: python matrix

树V的示例表示:

V = [3, [
        [1, []] ,
        [0, [
            [2, []] ,
            [5, []]]],
        [4, []]]]

3是树的根节点,嵌套列表中的每个元素表示节点的子节点。因此V是一棵树,其中3作为根节点,1,0和4作为3的子节点,2和5作为0的子节点。 到目前为止,这是我的代码:

def tree_to_matrix_helper(tree, size, matrix):
    for i in range(0, len(tree[1])) :
        matrix[tree[0]][tree[1][i][0]] = 1
        matrix[tree[1][i][0]][tree[0]] = 1
        if len(tree[1][i][1]) > 0:
           tree_to_matrix_helper(tree[1][i], size-len(tree[1])-1, matrix)
    return matrix

def tree_to_matrix(tree, size) :
    matrix_row = []
    matrix = []
    for i in range(0, size):
        matrix_row.append(0)
    for i in range(0, size):
        matrix.append(matrix_row)
    return tree_to_matrix_helper(tree, size, matrix)

真正奇怪的是,当我使用for循环初始化矩阵时,当我运行tree_to_matrix(V,6)时,我得到一个只有1的6x6邻接矩阵,这显然是错误的。但是当我简单地通过说

来初始化矩阵时
    matrix = [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]] 

(与for循环初始化的矩阵相同) 然后运行tree_to_matrix(V,6),我得到适当的相应邻接矩阵。这当然适用于任何大小为6的树,但我必须为任何大小的树抽象。问题是我能想到初始化邻接矩阵的唯一方法就是我在main函数中做到了这一点,但是矩阵中的每一行似乎总是相同。那么我该如何进行这种抽象呢?

0 个答案:

没有答案