Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将社区结构(列表)转换为邻接列表_Python_Algorithm_Data Structures_Depth First Search_Breadth First Search - Fatal编程技术网

Python 将社区结构(列表)转换为邻接列表

Python 将社区结构(列表)转换为邻接列表,python,algorithm,data-structures,depth-first-search,breadth-first-search,Python,Algorithm,Data Structures,Depth First Search,Breadth First Search,给定社区结构(列表列表列表): [[A,B,C],[B,D,E,G],[A,C,F,H],[F,K,H]] 假设每条边都有权1,在子群中是无向的 我想通过对每个人应用广度/深度优先搜索,找到最有影响力的人,他们与G,F(边的最小和)的联系最短 以下是广度优先搜索的通用代码: def bfs_paths(graph, start, goal): queue = [(start, [start])] while queue: (vertex, path) = queu

给定社区结构(列表列表列表):

[[A,B,C],[B,D,E,G],[A,C,F,H],[F,K,H]]

假设每条边都有权1,在子群中是无向的

我想通过对每个人应用广度/深度优先搜索,找到最有影响力的人,他们与G,F(边的最小和)的联系最短

以下是广度优先搜索的通用代码:

def bfs_paths(graph, start, goal):
    queue = [(start, [start])]
    while queue:
        (vertex, path) = queue.pop(0)
        for next in graph[vertex] - set(path):
            if next == goal:
                yield path + [next]
            else:
                queue.append((next, path + [next]))
问题是“图形”应该表示为邻接列表。例如:

graph = {'A': set(['B', 'C', 'F', 'H']),
         'B': set(['D', 'E','G']),
         'C': set(['A', 'F', 'H']),
         'D': set(['B', 'E', 'G' ]),
         'E': set(['B', 'D', 'G' ]),
         'F': set(['K', 'H']),
         'G': set(['B', 'D', 'E'])
         'H': set(['K', 'F']}
主要问题:如何将社区结构(列表)转换为邻接列表

旁白:还有其他合适的算法吗


Edit1:我试着跟着这个。但是我坚持改进代码以达到预期的结果

这可能会得到预期的结果

A1=[['A','B','C'], ['B','D','E','G'], ['A','C','F','H'],['F','K', 'H']]
dict1={}
for l in A1:
    for i in l:
        dict1[i]=[]

for i in dict1:

        index=100
        for j in A1:
            try:

                if j.index(i)<index:
                    index=j.index(i)
                    dict1[i]=[]
                    for k in j:
                        if k!=i:
                            dict1[i].append(k)
            except:
                pass
A1=['A'、'B'、'C']、['B'、'D'、'E'、'G']、['A'、'C'、'F'、'H']、['F'、'K'、'H']
dict1={}
对于A1中的l:
对于l中的i:
dict1[i]=[]
对于第1条中的i:
指数=100
对于A1中的j:
尝试:

如果j.index(i)假设所有社区都完全连接,您可以通过迭代组并使用
setdefault
在需要的地方创建新条目并添加节点,相当快地转换为邻接列表:

community = [['A','B','C'], ['B','D','E','G'], ['A','C','F','H'],['F','K','H']]

adj_list = {}

for group in community:
    for member in group:
        adj_list.setdefault(member, set()).update((set(group) - {member}))
调整列表将是:

{'A': {'B', 'C', 'F', 'H'},
 'B': {'A', 'C', 'D', 'E', 'G'},
 'C': {'A', 'B', 'F', 'H'},
 'D': {'B', 'E', 'G'},
 'E': {'B', 'D', 'G'},
 'G': {'B', 'D', 'E'},
 'F': {'A', 'C', 'H', 'K'},
 'H': {'A', 'C', 'F', 'K'},
 'K': {'F', 'H'}}

另一种方法是使用
defaultdict(set)
,然后您可以索引到它并以类似的方式进行更新。

您是否尝试过转换它?我不清楚什么是
社区结构
。看起来您正在讨论群集节点。在这种情况下,必须知道质心。如果不是这样,你能给出一些关于社区含义定义的外部链接吗?如果图是无向的,为什么
F
H
不在
A
的代理列表中?@DeveshKumarSingh:我试过下面的[这个]()@spiralarchitect:也许谢谢,我不敢相信使用
setdefault