簡體   English   中英

有向圖中的深度:在距離給定節點 k 處查找節點

[英]Depth in Directed Graph: Finding nodes at k distance from a given node

我正在嘗試使用函數查找距給定節點 k 距離的節點。

這是我的代碼:

def depth(graph, start, k):
    def levels(graph, start, visited, current_nodes, k):
        #base case
        if k == 0:
            return current_nodes
        else:
            current_nodes = []
        #if no neighbors, return
        if graph.adjacent_nodes(start) == []:
            return []
        for nodes in graph.adjacent_nodes(start):
            if nodes not in visited:
                visited.append(nodes)
            current_nodes.append(nodes)
        print("visited =", visited)
        print("current_nodes =", current_nodes)
        print("k =", k)
        for nodes in current_nodes:
            return levels(graph, nodes, visited, current_nodes, k-1)

    visited = [start]
    current_nodes = []
    required_nodes = levels(graph, start, visited, current_nodes, k)
    print(required_nodes)
    return required_nodes

這在 Spyder 中應該如何工作,但對於我的在線課程卻不是(我剛剛開始學習)。 我正在打印visitedcurrent_nodesk以查看發生了什么。

例如,對於a->b->c->dstart = ak = 5 ,則它應該返回一個空列表含義有在距離沒有節點5a Spyder 的輸出如下:

visited = ['a', 'b']
current_nodes = ['b']
k = 5
visited = ['a', 'b', 'c']
current_nodes = ['c']
k = 4
visited = ['a', 'b', 'c', 'd']
current_nodes = ['d']
k = 3
[]

但是,對於在線課程,輸出如下:

visited =  ['A', 'B']
current_nodes =  ['B']
k =  5
visited =  ['A', 'B', 'C']
current_nodes =  ['C']
k =  4
visited =  ['A', 'B', 'C', 'D']
current_nodes =  ['D']
k =  3
[]
visited =  ['A', 'B']
current_nodes =  ['B']
k =  4
visited =  ['A', 'B', 'C']
current_nodes =  ['C']
k =  3
visited =  ['A', 'B', 'C', 'D']
current_nodes =  ['D']
k =  2
[]
visited =  ['A', 'B']
current_nodes =  ['B']
k =  3
visited =  ['A', 'B', 'C']
current_nodes =  ['C']
k =  2
visited =  ['A', 'B', 'C', 'D']
current_nodes =  ['D']
k =  1
['D']
visited =  ['A', 'B']
current_nodes =  ['B']
k =  2
visited =  ['A', 'B', 'C']
current_nodes =  ['C']
k =  1
['C']
visited =  ['A', 'B']
current_nodes =  ['B']
k =  1
['B']
[]
visited =  ['A', 'B', 'D']
current_nodes =  ['B', 'D']
k =  3
visited =  ['A', 'B', 'D', 'C']
current_nodes =  ['C']
k =  2
visited =  ['A', 'B', 'D', 'C']
current_nodes =  ['D']
k =  1
['D']

有人可以告訴我我的代碼是否有問題嗎?

問題是current_nodes不應該附加節點,如果它們已經被訪問過。 並且在檢查相鄰節點之后,如果current_nodes為空,那么就沒有其他事情可做,因此返回一個空列表(表示在k距離處沒有找到節點)。

def depth(graph, start, k):
    def levels(graph, start, visited, current_nodes, k):
        '''BASE CASE'''
        if k == 0:
            return current_nodes
        else:
            current_nodes = []
        '''IF NO NEIGHBORS, RETURN AN EMPTY LIST'''
        if graph.adjacent_nodes(start) == []:
            return []
        for nodes in graph.adjacent_nodes(start):
            if nodes not in visited:
                visited.append(nodes)
                current_nodes.append(nodes)
        print("visited = ", visited)
        print("current_nodes = ", current_nodes)
        print("k = ", k)
        '''IF ALL ADJACENT NODES ALREADY VISITED, CURRENT NODES WILL BE EMPTY, RETURN []'''
        if current_nodes == []:
            return []
        '''RECURSION'''
        for nodes in current_nodes:
            return levels(graph, nodes, visited, current_nodes, k-1)

    visited = [start]
    current_nodes = []
    required_nodes = levels(graph, start, visited, current_nodes, k)
    print(required_nodes)
    return required_nodes

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM