dfs 显示所有的路径

class Node:
    def __init__( self, info = None, prev_node = None ):
        self.info = info
        self.prev_node = prev_node

    def __repr__( self ):
        if self.prev_node is None:
            return "[" + self.info + ", " + "nil" + "]"
        else:
            return "[" + self.info + ", " + self.prev_node.info + "]"

    def __eq__( self, other ):
        return self.info == other.info

def dfs(graph, prev = None,vertex_info = None, queue=[]):
    new_state = Node( vertex_info, prev )
    queue.append( new_state )
    for i in graph[vertex_info]:
        if Node(i, None) not in queue:
            queue=dfs(graph, new_state ,i,queue)

    return queue
       
 
G={"A":{"B","D"},
    "B":{"C","E"},
    "C":{"E","F"},
    "D":{"G"},
    "E":{"D","F","G","H"},
    "F":{"H"},
    "G":{"H"},
    "H":{}}
 
queue = (dfs(G, None,"A",))
print(queue)

def show_path( queue ):
    for index, item in enumerate( queue ):
        if index != 0:
            temp_node = queue[index - 1]
            if queue[index].prev_node.info != temp_node.info:
                while temp_node.info != queue[index].prev_node.info:
                    temp_node = temp_node.prev_node
                    print( "-->", temp_node.info )
            print( item.info )
        else:
            print( item.info ) 
show_path( queue )

猜你喜欢

转载自blog.csdn.net/weixin_42528089/article/details/91384259
今日推荐