微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bfs 没有为父数组提供正确的输出

如何解决bfs 没有为父数组提供正确的输出

我有一个函数 bfs_tree,它应该返回给定图形的父数组(bfs_loop 是一个辅助函数),但是对于下面的图形字符串(用我的 adj 列表函数将其转换为 adj 列表),其中起始节点是1,它在应该给出 [None,None,1,4,5,1] 时给出了 [None,2,1] 的父数组,但我不确定它哪里出错了?

  import collections
    
    
    def adjacency_list(graph_str):
        """Takes a graph string and returns the adjacency list"""
    
        lines = graph_str.splitlines()
        header = lines[0].split()
    
        if len(header) > 2:
            graph_type,vertices,weight = header[0],header[1],header[2]
        else:
            graph_type,vertices = header[0],header[1]
            weight = None
    
        edges = lines[1:]
        adj_list = [[] for _ in range(int(vertices))]
    
        if len(edges) > 0:
            for edge in edges:
                if weight == 'W':
                    v1,v2,w = edge.split()
                    v1,w = int(v1),int(v2),int(w)
                else:
                    v1,v2 = edge.split()
                    v1,v2 = int(v1),int(v2)
                    w = None
                    
                if graph_type == 'U':
                    adj_list[v1] += [(v2,w)]
                    adj_list[v2] += [(v1,w)]
                else:
                    adj_list[v1] += [(v2,w)]
        return adj_list
        
    
    
    def bfs_tree(adj_list,start):
        """bfs"""
        parent = [None]*len(adj_list)
        state = ['U']*len(adj_list)
        q = collections.deque([])
       
        state[start] = 'D'
        q.append(start)
        return bfs_loop(adj_list,q,state,parent)
       
       
       
    
    
    def bfs_loop(adj_list,parent):
        while len(q) != 0:
            item = q.pop()
            for exact_child in adj_list[item]: 
                child = exact_child[0]
                if state[child] == 'U':
                    state[child] = 'D'
                    parent[child] = item
                    q.append(child)
            state[item] = 'P'
        return parent
                    
                    
                
            
    graph_str = """\
    U 7
    1 2
    1 5
    1 6
    2 3
    2 5
    3 4
    4 5
    """
    
    
    adj_list = adjacency_list(graph_str)
     
           
    print(bfs_tree(adj_list,1))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。